使用MSWinsock.Winsock遇到问题,求查看发送缓冲区的数据量的方法

gearkun 2011-03-14 09:44:19
我用vbs写了一个用MSWinsock.Winsock实现通信的函数。
以下是发送数据的函数,我把数据拆成很多行来发送:

Function SockSendData(SockInstance, Data)

DataArr = Split(Data, vbCrLf)
LastLine = UBound(DataArr)
Line = LBound(DataArr)

Do while Line < LastLine
'Wscript.Sleep 10
SockInstance.SendData DataArr(Line) & vbCrLf
Line = Line + 1
Loop

If LastLine >= 0 Then SockInstance.SendData DataArr(LastLine)
End Function

但是,在发送大量数据时,连接会断开。
于是我在Do-Loop之间加了Wscript.Sleep 10,每发送一行暂停10毫秒,连接便没有断开。

所以这个问题的原因是SockInstance的发送缓冲区溢出了吗?

我将Do-Loop改成这样:
BufferLength = 1024
Do while Line < LastLine
If SockInstance.BytesReceived < BufferLength Then
SockInstance.SendData DataArr(Line) & vbCrLf
Line = Line + 1
End If
Loop
问题还是没有解决,连接断开了。于是我在每发一行后,同时发送SockInstance.BytesReceived的值,发现它始终都是0。后来发现这是接收缓冲区的。

我找不到文档,如果问题真的是发送缓冲区溢出,我想知道返回发送缓冲区数据的数量的函数。
对vbs很不熟悉,若问题很弱智,请各位不要见笑。
...全文
216 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
watt 2011-03-17
  • 打赏
  • 举报
回复
发送完第一行就会触发Winsock1_SendComplete事件,然后在Winsock1_SendComplete事件中继续一行一行的发就行了,用你用循环的方法是不行的。必须是成功一行然后再发下一行。每一行不要超过1024字节为好。
王二.麻子 2011-03-17
  • 打赏
  • 举报
回复
自己用socket api写个winsock控件吧,winsock提供的功能太差了。

socket提供了缓冲区空的事件方式
gearkun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dbcontrols 的回复:]

如果SockInstance.BytesReceived < BufferLength 条件不成了的话
你的循环会一直不停地循环下去,显然不可以的
[/Quote]

如果SockInstance.(输出缓冲区字节数) > BufferLength,而不是<。
那就不会继续发送数据,Line也不会增加,循环会当然一直下去,直到数据被发走,(输出缓冲区字节数)减少,才会继续发送数据,直到发完最后一行,Line=LastLine。您明白我的意思吗?

关键是我不知道那个代表(输出缓冲区字节数)的属性/方法叫什么名字
dbcontrols 2011-03-14
  • 打赏
  • 举报
回复
如果SockInstance.BytesReceived < BufferLength 条件不成了的话
你的循环会一直不停地循环下去,显然不可以的
gearkun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhao4zhong1 的回复:]

让接收方发送已收到字节数到发送方。
[/Quote]

接受方使用的是nc.exe。应该不会发生溢出。
gearkun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbcontrols 的回复:]

LastLine是啥楼主不肯提供
[/Quote]

LastLine = UBound(DataArr)
我把Data按行分开成为数组DataArr,LastLine是DataArr的最大可用下标。
赵4老师 2011-03-14
  • 打赏
  • 举报
回复
让接收方发送已收到字节数到发送方。
dbcontrols 2011-03-14
  • 打赏
  • 举报
回复
LastLine是啥楼主不肯提供
dbcontrols 2011-03-14
  • 打赏
  • 举报
回复
MSComm控件有,Winsock好像没有

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧