注册 登录
编程论坛 VB6论坛

winsock 控件 TCP 如何使数据立即发送

邵帅 发布于 2014-08-22 17:12, 3745 次点击
使用socket进行TCP通讯时,会产生粘包现象。一个主要的原因是发送方采用nagle算法对发送的数据进行了缓冲处理,在VC下可以通过
const char chOpt=1;   
int   nErr=setsockopt(   m_socket,   IPPROTO_TCP,   TCP_NODELAY,   &chOpt,   sizeof(char));   
来达到数据立即发送的目的。
由于项目需要用到VB的winsock控件,因此请教VB下如何实现数据的立即发送?是否有相应的函数。
3 回复
#2
Artless2014-08-22 18:01
SendData 方法
      

将数据发送给远程计算机。

返回值

Void

语法

object.SendData data

SendData 方法的语法有下面这些部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
data 要发送的数据。对于二进制数据应使用字节数组。


说明

当传进 UNICODE 字符串并在网络上发送出去之前,将转化成 ANSI 字符串。
#3
风吹过b2014-08-22 23:50
如果你数据量不是很大的情况下,
每次发完包,就使用
DoEvents
以确保发送完成。

另外,粘包的处理。TCP粘包是正常的。
封包结构: 封包头,封包数据,封包尾。
收到的数据包,与前一次的留包连接起来,先判断是否有 封包尾, 如果无,向前搜索到 封包尾,剩余部分保存到下一次再处理。
#4
邵帅2014-08-23 08:38
回复 3 楼 风吹过 b
多谢。
1