当前位置:编程学习 > VB >>

vb socket问题

vb socket 每次接收8192字节,如果最后一个字节刚好为半个汉字,转换为string时,最后字符变为0x00,接收完毕拼凑字符串会出现乱码,如何解决?
我自己判断最后几个字符ascii>128的数量为奇数,保留最后一字符,拼到下一次接收字符串前面。
但是在DataArrive事件中做这样处理,有时候会导致接收太慢,socket.state=8了,导致丢包,如何解决?
请指点!
实在没办法,用Bcb重新写程序了。VB有办法处理吗? --------------------编程问答-------------------- strconv直接转换不行吗 --------------------编程问答-------------------- 做个协议,接收时判断是否接受完成,没有完成则继续接收。 --------------------编程问答-------------------- winsock的确是有这个bug,如果对方关闭了连接,你这边还没有接收完数据的话,缓冲区中剩下的数据会丢失!!!只能自己用sock api了。这个暂时没什么好方法。 --------------------编程问答-------------------- 晕,难道都不用封包的么?

至少,一个比较健壮的通讯协议总得有吧...... --------------------编程问答--------------------
引用 4 楼 myjian 的回复:
晕,难道都不用封包的么?

至少,一个比较健壮的通讯协议总得有吧......


用封包的确能大幅避免这个问题,不过我试过winsock就算用了封包也会有我说的bug,我换了api就没事了。 --------------------编程问答-------------------- 尤其不是与自己的程序通信的时候。 --------------------编程问答-------------------- 接收到Byte()中
全部接收完后
str=StrConv(ByteArray(),vbUnicode) --------------------编程问答--------------------
引用 1 楼 zzhgb 的回复:
strconv直接转换不行吗

strconv转换最后一个字符为半个汉字的话,转换出来会变成00 --------------------编程问答-------------------- 直接调用socket api,可以设置阻塞模式吧
接收100k的字符串没有问题吧? --------------------编程问答-------------------- 协议有的啊,先发7位报文长度,然后再接收这个长度的报文.
问题是用DataArrive事件接收时,每次8k,strconv转换最后一个字符为半个汉字的话,转换出来会变成00,
如果在DataArrive时间里做字符串处理,有时会发生丢包,socket.state=8.
没办法,只能用C++重写。vb实在不怎么会用,用着也不爽 --------------------编程问答--------------------
引用 7 楼 zhao4zhong1 的回复:
接收到Byte()中
全部接收完后
str=StrConv(ByteArray(),vbUnicode)

难道不行吗? --------------------编程问答-------------------- ..............
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,