请教关于netstream的问题,请大侠帮忙

wildboat 2004-05-06 08:16:45
我的意思是在发送netstream是在流前加流的长度并用"|"与流分隔,接受时先接受12个byte,并转为string,读出发送流的长度,在将12个byte里除了流长度和“|”剩余的byte拷贝到allbyte(),再将剩余的流读出液放入到allbyte,然后转为文本
可却发现问题:只能传输大小为9571的文本,再大的话就显示空格,但目标文本大小与原文本大小相同
请问是什么原因,请赐教
Sub send()
Dim client As New Sockets.TcpClient("monica", 6605)
Dim sendstream As Sockets.NetworkStream
sendstream = client.GetStream
Dim sendfile As New IO.FileStream("f:\so.txt", IO.FileMode.Open)

Dim defbyte(sendfile.Length - 1) As Byte
sendfile.Read(defbyte, 0, defbyte.Length)
sendfile.Close()

Dim bytelen() As Byte
bytelen = Encoding.Default.GetBytes(defbyte.Length.ToString & "|")

Dim sendbyte(defbyte.Length + bytelen.Length - 1) As Byte
bytelen.CopyTo(sendbyte, 0)
defbyte.CopyTo(sendbyte, bytelen.Length)


MsgBox("发送文件" & sendbyte.Length)
sendstream.Write(sendbyte, 0, sendbyte.Length)
sendfile.Close()
client.Close()
End Sub

Sub listen()
listener.Start()
While True
Dim server As New Sockets.TcpClient()
server = listener.AcceptTcpClient
Dim recstream As Sockets.NetworkStream
recstream = server.GetStream

Dim realbytecount As Integer = 0
Dim firstread(11) As Byte
recstream.Read(firstread, 0, 12)

Dim str As String
str = Encoding.Default.GetString(firstread)
realbytecount = Mid(str, 1, str.IndexOf("|"))
Dim yu As Integer = 12 - realbytecount.ToString.Length - 1

Dim secondread(realbytecount + realbytecount.ToString.Length - 12) As Byte
Dim allbyte(realbytecount - 1) As Byte

firstread.Copy(firstread, realbytecount.ToString.Length + 1, allbyte, 0, yu)

recstream.Read(secondread, 0, secondread.Length)

secondread.CopyTo(allbyte, yu)
recstream.Close()

server.Close()

Dim recfile As New IO.FileStream("f:\kill.txt", IO.FileMode.Create)
recfile.Write(allbyte, 0, allbyte.Length)

recfile.Close()

End While
End Sub
其余代码省略
...全文
26 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wildboat 2004-05-09
1。这里只考虑流大于12的问题
2。realbytecount = Mid(str, 1, str.IndexOf("|"))

为了取出分隔符“|”前的数字,即发送流的实际大小
3。Dim yu As Integer = 12 - realbytecount.ToString.Length - 1

例:23|aaaaaaaaa 23即realbytecount,为了求出前12个字符中除了23|其余字节的大小
  • 打赏
  • 举报
回复
wangsaokui 2004-05-08
我觉得是你先设定了bytes(12)存放流的长度,但有可能流长度不到12位,所以要看是什么(0或null)填充了这个bytes(12),
realbytecount = Mid(str, 1, str.IndexOf("|"))
Dim yu As Integer = 12 - realbytecount.ToString.Length - 1
这两句我觉得有问题mid操作字符串,如何得到的值赋给一个整形realbytecount ?既然realbytecount是整形,为什么realbytecount.ToString.Length,没有读明白,你写个注释再发短信给我。
  • 打赏
  • 举报
回复
wildboat 2004-05-07
各位大哥没人愿意帮忙吗?
我用sockets.socket试了一下,也是复制不完全,余下的就成了空格
是不是和缓存有关?
你们以前用socket是如何写文件,尤其是较大的文件
再拜!!!
  • 打赏
  • 举报
回复
wildboat 2004-05-07
大哥,你正经点好不好,不要乱开玩笑
  • 打赏
  • 举报
回复
zero16 2004-05-07
http://www.12Yeah.com/default2.htm?user=abcd
  • 打赏
  • 举报
回复
相关推荐
发帖
VB
加入

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2004-05-06 08:16
社区公告
暂无公告