下面是我的程序:
服务端:
Private bConnected As Boolean
Private Sub ClientSock_Connect()
bConnected = True
End SubPrivate Sub Form_Load()
ServerSock.LocalPort = 1505
If ServerSock.State <> sckClosed Then
ServerSock.Close
End If
ServerSock.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
If ServerSock.State <> sckConnected Then
ServerSock.Close
End If
' ClientSock.Close
End SubPrivate Sub ServerSock_ConnectionRequest(ByVal requestID As Long)
If ServerSock.State <> sckClosed Then _
ServerSock.Close
ServerSock.Accept requestID
End SubPrivate Sub ServerSock_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
ServerSock.GetData strData
Text1.Text = strData
End Sub客户端:
Private bConnected As BooleanPrivate Sub ClientSock_Connect()
bConnected = True
End SubPrivate Sub Command1_Click()
ClientSock.Connect
End SubPrivate Sub Command2_Click()
Do Until bConnected
DoEvents
If ClientSock.State <> sckClosed Then
End If Loop
ClientSock.SendData Text1.Text
End SubPrivate Sub Form_Load()
ClientSock.RemoteHost = "10.1.1.253"
ClientSock.RemotePort = 1505
End SubPrivate Sub Form_Unload(Cancel As Integer)
If ClientSock.State <> sckConnected Then
ClientSock.Close
End If
End Sub
服务端:
Private bConnected As Boolean
Private Sub ClientSock_Connect()
bConnected = True
End SubPrivate Sub Form_Load()
ServerSock.LocalPort = 1505
If ServerSock.State <> sckClosed Then
ServerSock.Close
End If
ServerSock.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
If ServerSock.State <> sckConnected Then
ServerSock.Close
End If
' ClientSock.Close
End SubPrivate Sub ServerSock_ConnectionRequest(ByVal requestID As Long)
If ServerSock.State <> sckClosed Then _
ServerSock.Close
ServerSock.Accept requestID
End SubPrivate Sub ServerSock_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
ServerSock.GetData strData
Text1.Text = strData
End Sub客户端:
Private bConnected As BooleanPrivate Sub ClientSock_Connect()
bConnected = True
End SubPrivate Sub Command1_Click()
ClientSock.Connect
End SubPrivate Sub Command2_Click()
Do Until bConnected
DoEvents
If ClientSock.State <> sckClosed Then
End If Loop
ClientSock.SendData Text1.Text
End SubPrivate Sub Form_Load()
ClientSock.RemoteHost = "10.1.1.253"
ClientSock.RemotePort = 1505
End SubPrivate Sub Form_Unload(Cancel As Integer)
If ClientSock.State <> sckConnected Then
ClientSock.Close
End If
End Sub
ServerSock.Close
ServerSock.Listen
例如
Private Sub ServerSock_Close()
ServerSock.Listen
End Sub
创建模块级的socket数组或单个变量(如果多个客户端需要数组,一对一则一个变量就行)
dim m_objSocket as WinSocket
Private Sub ServerSock_ConnectionRequest(ByVal requestID As Long)
if m_objsocket is nothing then
set m_objsocket=new winsocket
endif
m_objsocket.close
m_objsocket.Accept requestID
End Sub这样的好处是用一个socket专门listen,连接握手时用别的socket对象和客户端连接而listen的socket继续工作。如果先停客户端就可以继续连上服务器了。:)