我们一个项目,建了一个客户端socket连接,当向服务端发送"CCPP",服务端会验证返回信息,我们要判断返回码,如果是"A"就成功,如果返回码为"B"就失败,我们想在senddata后立即判断返回码,代码如下:Private Sub Command1_Click()
If Winsock1.State = sckConnected Then Winsock1.SendData "CCPP"
msgbox str
end subPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData str, vbString '按照字符串类型接收信息
End Sub请问为什么返回码变量str始终为空呢?因为有多种可能的命令,我不想在Winsock1_DataArrival里判断,就想在senddata后立即判断

解决方案 »

  1.   

    网络通讯是需要时间的,而且这个时间远大于指令执行的时间,所以在senddata后立即去读那是肯定读不到的。
      

  2.   

    但我用sleep()  延迟也不行啊?
      

  3.   

    单加 Sleep 肯定不行。因为你的 Sleep 以及随后的代码处于独占地位。直接在 Winsock1_DataArrival 事件中显示不是更直接吗?当然,你也可以在 Command1_Click 事件中用加 DoEvents 的循环来等待(尽管不是太好):Private Sub Command1_Click()
    str = ""
    If Winsock1.State = sckConnected Then Winsock1.SendData "CCPP"
    Do Until str > ""
        DoEvents
    Loop
    msgbox str
    end sub另外,好的编程习惯不推荐用 str 这样的关键字作变量名。