我把試出來的標準寫法寫在下面吧:
以下Server一次只能收一個connection request...因為我一收到request就把server的
listen就關掉了..如果你要讓Server收多個request..請用Winsock陣列
此外MS Winsock OCX有一個相當不合理的Event...Winsock_connect()..照理說這個event
應該是要發生在 client的connect request被server accept之後才發生,其實不然,你試就
知道,很多本書都這樣寫...騙了我好久 :)
以下就是我的寫法...在同一個project當中有client和server...IP 用 127.0.0.0
module1.bas
sub main()
form1.show
form2.show
end sub
Server (Form1)
--------------
Private Sub cmdListen_Click()
cmdListen.Enabled = False
Winsock1.Close
Winsock1.LocalPort = 1400
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock2.Close
Winsock2.Accept requestID
Debug.Print "Connection from " & Winsock2.RemoteHostIP & ":" & Winsock2.RemotePort
End Sub
Private Sub Winsock2_Close()
Winsock2.Close
cmdListen.Enabled = True
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock2.GetData data, vbString
Debug.Print "Server local port:" & Winsock2.LocalPort
Debug.Print "Server Received data: " & data
End Sub
Client (Form2)
---------------
Private Sub cmdConnect_Click()
cmdConnect.Enabled = False
Winsock1.Close
'這樣系統會自己找一個free port
Winsock1.LocalPort = 0
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 1400
Winsock1.Connect
Do
DoEvents
Loop Until Winsock1.State = sckConnected Or Winsock1.State = sckError
If Winsock1.State = sckConnected Then
MsgBox "connected"
cmdSend.Enabled = True
cmdDisconnect.Enabled = True
Else
cmdConnect.Enabled = True
End If
End Sub
Private Sub cmdDisconnect_Click()
Winsock1.Close
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
Private Sub cmdSend_Click()
If Winsock1.State = sckConnected Then
Debug.Print "Client Send Data: " & "this is a test"
Winsock1.SendData "this is a test"
End If
End Sub
Private Sub Form_Load()
cmdSend.Enabled = False
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
--
※ Origin: 程式設計樂園 ◆ From: 140.116.72.60