一般的winsock应用是客户机发请求,而服务器接受请求进行处理,那怎样将处理后的结果返回给客户机呢?也就是说怎样实现双向通信?

解决方案 »

  1.   

    服务端的winsock直接调用senddata方法就可以了
      

  2.   

    winsock相当于一个握手控件,一方不断发出连接请求(客户端),另一方listen(服务器端),双方建立连接后,就是一个双相的通讯,DataArrival事件里用getdata方法,只要对方senddata,就可以获得对方要传输的数据
      

  3.   

    Option ExplicitPrivate Sub cmdClear_Click()
      txtSend.Text = Empty
    End SubPrivate Sub cmdConnect_Click()
      wsClient.RemoteHost = Trim(txtRemoteHost.Text)
      wsClient.RemotePort = Val(Trim(txtRemotePort.Text))
      wsClient.Connect
      If wsClient.State = sckConnected Then
        MsgBox "已经连接!"
      End If
    End SubPrivate Sub cmdExit_Click()
      On Error Resume Next
      wsServer.Close
      wsClient.Close
      Unload Me
    End SubPrivate Sub cmdListen_Click()
      wsServer.LocalPort = Val(Trim(txtLocalPort.Text))
      wsServer.Listen
    End SubPrivate Sub cmdSend_Click()
      If Trim(txtSend.Text) <> Empty Then
        wsClient.SendData Trim(txtSend.Text)
        
        If txtRecieved.Text <> Empty Then
         txtRecieved.Text = txtRecieved.Text & vbCrLf & Trim(txtSend.Text)
        Else
          txtRecieved.Text = Trim(txtSend.Text)
      End If
        txtSend.Text = Empty
      End If
    End SubPrivate Sub Form_Load()
      Me.Left = 100
      Me.Top = 100
      
      
    End SubPrivate Sub wsServer_ConnectionRequest(ByVal requestID As Long)
      If wsServer.State <> sckClosed Then wsServer.Close
      wsServer.Accept requestID
    End SubPrivate Sub wsServer_DataArrival(ByVal bytesTotal As Long)
      Dim strData As String
      
      wsServer.GetData strData
      
      If txtRecieved.Text <> Empty Then
        txtRecieved.Text = txtRecieved.Text & vbCrLf & strData
      Else
        txtRecieved.Text = strData
      End If
    End Sub
      

  4.   

    要把这些代码封装给asp调用,发送的内容由asp传递,接受的内容由asp显示该怎么弄?
      

  5.   

    嘻嘻,既然都没结,就继续问继续答啊。
    要把winsock封装成dll,但是不需要界面,该怎么做?
      

  6.   

    Winsock 控件
                Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。TCP 基础数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。UDP 基础用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 DataArrival 事件内的 GetData 方法来获取已发送的信息。