大家好!我有两个问题想请问各位高手:  
  
    1、请问怎样用winscok作为客户端给服务器端发送数据时怎样判断当前是否已经与服务器端连通啊?    2、还有一点就是发送数据时需要延时吗?我试过用SendData发送,接收端触DataArrival事件就马上能接收到数据,好像是批量接收的,而且会不断的触发DataArrival事件,这样好像不需要延时吧?

解决方案 »

  1.   

    監聽服務 端
    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
      

  2.   

    客戶端
    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