Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckcolsed Then Winsock1.Close
Winsock1.Accept requestID
Label1.Caption = "有客户端连入本机"
End Sub
第一句话是让WinSock控件关闭,如果关闭了还怎么接收消息了
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckcolsed Then Winsock1.Close
Winsock1.Accept requestID
Label1.Caption = "有客户端连入本机"
End Sub
第一句话是让WinSock控件关闭,如果关闭了还怎么接收消息了
你在设置winsock控件的时候是是用TCP连接吧。
TCP连接协议里为了保证双方在断开连接时不丢失数据,使用一种安全断开连接的方式。比如说甲乙两个现在正在连接着,甲突然断开连接,如果不使用TCP的安全断开方式的话,在甲断开的瞬间,恰好乙又发送了数据,那么这个数据就会被甲忽略,这样数据就丢失了。
如果使用了一种安全的断开方式,还是上面甲乙机的例子,当甲断开的时候他先断开由甲到乙的链接,TCP是双工的链接,所以甲断开的是自己的发送链接,此时他还保留由乙到甲的链接即自己的接受链接。此时如果乙还有发送数据的话也会被甲接受,不至于导致数据丢失。
因为一个winsock不能进行多个客户端连接,所以有新连接时它要先关闭上一次连接。