我用一个子过程调用Servers.Winsock1.SendData "IsProcess" & Prc 发送数据
但是接收方只能接收到8个数据..刚开始我以为发送方有问题,调试看了下发送的是完整数据,没有问题..
我又把接收方的得到的数据输出到立即窗口 的确值接收到了8个数据,,,问题可能是接收方..可能因Chr(0)(空格太多)
请大家帮我解释下为什么我发送20多个数据接收方只能接收到8个 而去掉发送方的Chr(0)(很多这个)接收方就可以收到完整数据了....
如果接收方发现空格太多是不是接收一半数据啊?
我先给出没有修改的发送方代码:
Function Get_Prc_List()
DoEvents
Dim Prc As String
PrcHwnd = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&) '快照系统所有进程
If PrcHwnd <> -1 Then
Dim PrcInfo As PROCESSENTRY32
PrcInfo.dwSize = Len(PrcInfo)
If Process32First(PrcHwnd, PrcInfo) <> 0 Then
Prc = PrcInfo.szExeFile & vbCrLf
While Process32Next(PrcHwnd, PrcInfo) <> 0
Prc = Prc & PrcInfo.szExeFile & vbCrLf
Wend
End If
Servers.Winsock1.SendData "IsProcess" & Prc
Debug.Print Prc
End If
End Function
就是这2句了:Prc = PrcInfo.szExeFile & vbCrLf
Prc = Prc & PrcInfo.szExeFile & vbCrLf
我把这2句改成这样接收方就可以收到完整数据了..
Prc = Left(PrcInfo.szExeFile, InStr(1, PrcInfo.szExeFile, Chr(0)) - 1) & vbCrLf
Prc = Prc & Left(PrcInfo.szExeFile, InStr(1, PrcInfo.szExeFile, Chr(0)) - 1) & vbCrLf
这样就没有问题..请大家解释下我听可以吗?
13 个解决方案
#1
为什么去掉那些Chr(0) 接收方才可以得到完整数据呢?
因为发送方的chr(0)太多而导致的吗?
因为发送方的chr(0)太多而导致的吗?
#2
MsgBox "Str1" & Chr(0) & "Str2"
运行下试试。
估计与这原理差不多,但我说不清。
运行下试试。
估计与这原理差不多,但我说不清。
#3
有些真说不清,有一次我遇上过"g"或者"G"字符打头的数据包发不出去的情况,重装了一次电脑就好了
chr(0)也是能发的,不过含有asc值大于127的最好不要用字符串来发,接收的时候会出错
chr(0)也是能发的,不过含有asc值大于127的最好不要用字符串来发,接收的时候会出错
#4
不用字符串来发那用什么来发呢?有的人说字节数组来发..这个怎么用?
我发送的数据前面都带一个字符串的..主要用来给接收端判断用的..接收到的命令是什么.
#5
不可显示字符的发送是要慎重处理的~~~
#6
是啊..我处理掉了那些Chr(0)了..
#8
这个可能是被截断了,因为chr(0)一般是作为字符串结束标志的.
使用字节方式发送,再解析字节内容...就没问题了.
使用字节方式发送,再解析字节内容...就没问题了.
#9
#10
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
#11
特殊符号直接在客户端进行解析
#12
VB在读到chr(0) 时,会认定字符串结束了。
chr(0)是字符串的结束符,无论是VB,还是C语言,都一样的。既然是结束了,当然发送不过去。
chr(0)是字符串的结束符,无论是VB,还是C语言,都一样的。既然是结束了,当然发送不过去。
#13
Dim Prc As String
Dim B() As Byte
B=strconv("IsProcess" & Prc,vbFromUnicode)
Servers.Winsock1.SendData B
Dim B() As Byte
B=strconv("IsProcess" & Prc,vbFromUnicode)
Servers.Winsock1.SendData B
#1
为什么去掉那些Chr(0) 接收方才可以得到完整数据呢?
因为发送方的chr(0)太多而导致的吗?
因为发送方的chr(0)太多而导致的吗?
#2
MsgBox "Str1" & Chr(0) & "Str2"
运行下试试。
估计与这原理差不多,但我说不清。
运行下试试。
估计与这原理差不多,但我说不清。
#3
有些真说不清,有一次我遇上过"g"或者"G"字符打头的数据包发不出去的情况,重装了一次电脑就好了
chr(0)也是能发的,不过含有asc值大于127的最好不要用字符串来发,接收的时候会出错
chr(0)也是能发的,不过含有asc值大于127的最好不要用字符串来发,接收的时候会出错
#4
不用字符串来发那用什么来发呢?有的人说字节数组来发..这个怎么用?
我发送的数据前面都带一个字符串的..主要用来给接收端判断用的..接收到的命令是什么.
#5
不可显示字符的发送是要慎重处理的~~~
#6
是啊..我处理掉了那些Chr(0)了..
#7
#8
这个可能是被截断了,因为chr(0)一般是作为字符串结束标志的.
使用字节方式发送,再解析字节内容...就没问题了.
使用字节方式发送,再解析字节内容...就没问题了.
#9
#10
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
#11
特殊符号直接在客户端进行解析
#12
VB在读到chr(0) 时,会认定字符串结束了。
chr(0)是字符串的结束符,无论是VB,还是C语言,都一样的。既然是结束了,当然发送不过去。
chr(0)是字符串的结束符,无论是VB,还是C语言,都一样的。既然是结束了,当然发送不过去。
#13
Dim Prc As String
Dim B() As Byte
B=strconv("IsProcess" & Prc,vbFromUnicode)
Servers.Winsock1.SendData B
Dim B() As Byte
B=strconv("IsProcess" & Prc,vbFromUnicode)
Servers.Winsock1.SendData B