winsock接收数据实现问题?

hxp20032008 2007-10-26 10:54:36
我在使用winsock的发送数据命令后,希望延时一段时间,等待接收数据事件的响应,然后处理数据,处理完毕后继续发送下一条指令,
整个过程用时间控件实现,现在问题是如何用一个较好的算法实现它,如果能给出示例程序更好了,请各位兄弟姐妹帮忙了,初学winsock,请多关照!
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
toury 2007-10-29
  • 打赏
  • 举报
回复
Q1:执行DoEvents;
Q2:"等待响应dataarrival事件"?可以实现.比如,你可以在CLIENT接受并处理数据之后发一个标志给SERVER,SERVER收到后再SENDDATA;但没那个必要吧,效率太低了!
--------------------------
使用winsock做通讯几个最重要的地方:

1,自己的会话规则,即,所谓的自己的"报头";例如,使用~|作为分割符号,后面带有用户标志验证,数据类型标示....比如:WinSock.SendData "~|myIP|exit"
2,处理数据"粘包":有了会话规则,当处理大数据传送时,发送端将数据文件读入CHUNK,配合FILELEN循环判断文件是否发送完毕,没结束就发送并PAUSE一下;
3,CLIENT退出的处理 :应该先向SERVER"申请退出";等SERVER处理了端口记录后再发回消息给CLIENT -->"OK,你可以退出了",CLIENT此时才可以退;不然下次这个CLIENT很可能就上不来了,呵呵.
4,错误处理,这个重要性就不用说了吧
hxp20032008 2007-10-29
  • 打赏
  • 举报
回复
呵呵,toury师兄讲得太好了,我昨天依照你的方法使用PAUSE已经实现了数据接收,呵呵,马上给你加分了!工作愉快!
hxp20032008 2007-10-28
  • 打赏
  • 举报
回复
我用的是VB6,楼上的
Do
u% = DoEvents
Loop Until t + lngInteval < GetTickCount
没看明白什么意思,我理解是直到lngInteval时间结束之前一直执行DoEvents,是吗?
我想在WinSock.SendData bytData之后等待响应dataarrival事件,可以实现吗?
多谢了!
wss1801 2007-10-27
  • 打赏
  • 举报
回复
你是用VB6还是用VB.NET呀?
toury 2007-10-26
  • 打赏
  • 举报
回复
用API

Private Declare Function GetTickCount Lib "KERNEL32" () As Long

private sub SendFile()
...
WinSock.SendData bytData
DoEvents
Pause 10'根据你的数据块大小调整延时长度

end sub

Sub Pause(lngInteval&)
Dim u%, t&
tick = GetTickCount()
Do
u% = DoEvents
Loop Until t + lngInteval < GetTickCount
End Sub

hxp20032008 2007-10-26
  • 打赏
  • 举报
回复
希望哪位热心人给点思路,本人不才,想三天了,也试了好几回,都没思路

1,502

社区成员

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

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