精華區beta Programming 關於我們 聯絡資訊
我把試出來的標準寫法寫在下面吧: 以下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