我在使用winsock的发送数据命令后,希望延时一段时间,等待接收数据事件的响应,然后处理数据,处理完毕后继续发送下一条指令,
整个过程用时间控件实现,现在问题是如何用一个较好的算法实现它,如果能给出示例程序更好了,请各位兄弟姐妹帮忙了,初学winsock,请多关照!

解决方案 »

  1.   

    用APIPrivate Declare Function GetTickCount Lib "KERNEL32" () As Longprivate sub SendFile()
      ...
      WinSock.SendData bytData
      DoEvents
      Pause 10'根据你的数据块大小调整延时长度end subSub Pause(lngInteval&)
      Dim u%, t&
      tick = GetTickCount()
      Do
        u% = DoEvents
      Loop Until t + lngInteval < GetTickCount
    End Sub
      

  2.   

    你是用VB6还是用VB.NET呀?
      

  3.   

    我用的是VB6,楼上的
    Do
    u% = DoEvents
    Loop Until t + lngInteval < GetTickCount
    没看明白什么意思,我理解是直到lngInteval时间结束之前一直执行DoEvents,是吗?
    我想在WinSock.SendData bytData之后等待响应dataarrival事件,可以实现吗?
    多谢了!
      

  4.   

    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,错误处理,这个重要性就不用说了吧
      

  5.   

    呵呵,toury师兄讲得太好了,我昨天依照你的方法使用PAUSE已经实现了数据接收,呵呵,马上给你加分了!工作愉快!