大家好!我有两个问题想请问各位高手:
1、请问怎样用winscok作为客户端给服务器端发送数据时怎样判断当前是否已经与服务器端连通啊? 2、还有一点就是发送数据时需要延时吗?我试过用SendData发送,接收端触DataArrival事件就马上能接收到数据,好像是批量接收的,而且会不断的触发DataArrival事件,这样好像不需要延时吧?
1、请问怎样用winscok作为客户端给服务器端发送数据时怎样判断当前是否已经与服务器端连通啊? 2、还有一点就是发送数据时需要延时吗?我试过用SendData发送,接收端触DataArrival事件就马上能接收到数据,好像是批量接收的,而且会不断的触发DataArrival事件,这样好像不需要延时吧?
Private Sub Form_Load()
' 使用 TCP Protocol
WskServer.Protocol = sckTCPProtocol
' 設定本 Server 的 IP Address
txtServerIP = WskServer.LocalIP
End SubPrivate Sub cmdListen_Click()
cmdListen.Enabled = False
lblServerStatus = "Listening for Connection." ' 設定本 Server 的連接 Port
WskServer.LocalPort = txtServerPort.Text
' 檢查 Winsock 是否已產生連結?
If WskServer.State <> sckConnected Then
' 若未產生連結則產生 Listen
WskServer.Listen
Else
MsgBox "Server is already connected!", vbCritical
Exit Sub
End If
End SubPrivate Sub WskServer_ConnectionRequest(ByVal requestID As Long)
' 檢查 Server Winsock 是否已產生連結?
If WskServer.State = sckConnected Then
MsgBox "Server is already connected!", vbCritical
Exit Sub
End If
WskServer.Close
' 接受來自 Client 端的 Request
WskServer.Accept requestID
lblServerStatus = "Processing Connection."
lstServerLog.AddItem Time & " - " & "Client Connected"
' 傳送訊息回 Client 端
WskServer.SendData "CLOSE"
DoEvents
WskServer.Close
cmdListen.Enabled = True
lblServerStatus = "Server Idle"
End Sub
Private Sub Form_Load()
' 使用 TCP Protocol
WskClient.Protocol = sckTCPProtocol
End SubPrivate Sub cmdConnect_Click()
Timer1.Enabled = True
' 設定欲連結 Server 的 Remote Host IP Address
If LCase(txtClientIP) = "localhost" Then
WskClient.RemoteHost = "127.0.0.1"
Else
WskClient.RemoteHost = txtClientIP
End If
' 設定欲連結 Server 的 Remote Port
WskClient.RemotePort = txtClientPort
' 檢查 Winsock 是否已經連結上 Server?
If WskClient.State <> sckConnected Then
' 未連結上 Server
WskClient.Connect
Else
' 已連結上 Server
MsgBox "Client is already connected!", vbCritical
Exit Sub
End If
lblClientStatus = "Connecting."
cmdConnect.Enabled = False
End SubPrivate Sub WskClient_Connect()
Timer1.Enabled = False
lblClientStatus = "Connected."
End SubPrivate Sub WskClient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
' 取得 Server 端回傳的指令資料
WskClient.GetData strData
' 檢查 Server 端回傳指令是否為 "CLOSE"
If UCase(strData) = "CLOSE" Then
WskClient.Close
lblClientStatus = "Closing Connection."
cmdConnect.Enabled = True
End If
lblClientStatus = "Not Connected"
End SubPrivate Sub Timer1_Timer()
' 若無法連上 Server (Timer1.Interval = 5000) 則關閉連結 MsgBox "Client could not find server.", vbCritical
' 檢查 Winsock 是否已經關閉連結
If WskClient.State <> sckClosed Then
WskClient.Close
End If
cmdConnect.Enabled = True
Timer1.Enabled = False
lblClientStatus = "Not Connected."
End Sub