首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么在Winsock的DataArrival事件未生成前获取部分传输数据

2012-12-20 
怎样在Winsock的DataArrival事件未生成前获取部分传输数据?本帖最后由 itakeblue 于 2012-10-01 14:35:59

怎样在Winsock的DataArrival事件未生成前获取部分传输数据?
本帖最后由 itakeblue 于 2012-10-01 14:35:59 编辑 一个基于JAVA的客户端通过TCP端口发送数据,格式如下:
命令+分割号(作为命令结束符)
比如:
123|
或者
456|

当服务端接收到数据后,在DataArrival事件处理。

现在问题是,如果客户端发送数据过快,多条命令合成了一条,
如123|和456|两条变成了123|456|一条

服务端在接收到123|456|才生成DataArrival事件,而我需要及时处理123|这条命令。

好像winsock接收数据时,要客户端发送数据后空闲一小段时间,才会生成DataArrival事件,请问我现在的需求能有法解决吗?谢谢!
[最优解释]
你这个问题,最理想也最彻底的解决办法就是改动通讯协议,让协议强壮,简单来说就是发送方发送数据后,需要接收方在收到并处理后给一个反馈,然后发送方才进行下一次的发送.

然而这个改动不小,而且如果发送方不是可以更改的情况下也不适用.

那就使用最小改动的方案,即在DataArrival事件中做好多条数据识别的代码,也就是说事先就将收到的数据按连续发送过来的情况设计.

代码方面,先将数据收到一个缓冲区,如果你的数据全是可打印字符,那这个缓冲区可以使用一个字符串变量,再用split以"
[其他解释]
"为分割符分开到一个字符串数组中,最后循环从数组中取出数据并处理即可.

如果数据中包含不可打印字符,则要使用字节数组接收数据,并自己用循环来检测"
[其他解释]
",同时拆分出数据并分别处理.

这种改动方案动的代码非常少,而且就你所说的问题来看,是完全能解决掉的.

但是如果这个项目将来可能会做大的话,最好还是从协议上解决,将通讯部分做得很强壮,并封装起来,这样以后也不会再为了这部分而多花精力,做成真正的百年大计
[其他解释]

热点排行