小弟做设计,有CA的数字签名系统,现在只剩最后一个功能模块,WINSOCK通信:在客户端向服务器端发送一条查询命令,在服务器端的数据库里找出所要的用户,在客户端显示出此用户的编号,姓名,及密钥。变态的老师要我们必须用WINSOCK控件实现啊。。谁有类似的代码???

解决方案 »

  1.   

    服务器端设置winsock数组.监听某端口.
    客户端发送数据.设置数据格式,服务器端对数据处理返回数据.
    就这么简单.
      

  2.   

    同意楼上。数据库就在SERVER端啊
      

  3.   

    服务端:
    Private Sub form_Load()
      With Me
        .SckServer(0).LocalPort = 1001  '本地端口
        .SckServer(0).Listen '开始监听
      End With
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Dim i As Long
    For i = 1 To SckServer.Count - 1
        If SckServer(i).State = 7 Then
            SckServer(i).Close
        End If
    Next
    SckServer(0).CloseEnd SubPrivate Sub SckServer_Close(Index As Integer)
    Me.SckServer(Index).Close
    Me.SckServer(Index).Tag = ""
    End SubPrivate Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    Dim i As Long, l As Boolean, cou As Long, flag As Long
    cou = 0
    For i = 1 To Me.SckServer.Count - 1
        If Me.SckServer(i).State = 0 And Not l Then
            Me.SckServer(i).Accept (requestID)
            flag = i
            l = True
        Else
            cou = cou + 1
        End If
    Next
    If Not l Then
        i = Me.SckServer.Count
        Load Me.SckServer(i)
        flag = i
        Me.SckServer(i).Accept (requestID)
    End IfEnd Sub
    Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim strData As String
    SckServer(Index).GetData strData
    Text1.Text = strData     '这里写收到客户端的信息后处理信息的代码
    End If
    End SubPrivate Sub SckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Call SckServer_Close(Index)
    End Sub
    客户端:
    Private Sub form_Load()
      With Me
        .sckClient.RemoteHost = "192.168.0.46" '设置远程IP,本例设为本机。
        .sckClient.RemotePort = 1001 '远程端口,就为server中的设置一样.
      End With
      sckClient.Connect
      Text1.Text = "正在测试连接....."
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    If Me.sckClient.State = 7 Then Me.sckClient.Close
     ' sckClient.SendData "QUIT"
    End SubPrivate Sub sckClient_Close()
    sckClient.Close
    Text1.Text = "服务器未开启"
    End SubPrivate Sub sckClient_Connect()
    Text1.Text = "连接成功"
    End SubPrivate Sub sckClient_ConnectionRequest(ByVal requestID As Long)
      With Me
        If .sckClient.State <> sckClosed Then .sckClient.Close
        .sckClient.Accept (requestID)
    End With
    End SubPrivate Sub sckClient_DataArrival(ByVal bytesTotal As Long)
    On Error Resume Next
    Dim strData As String
    sckClient.GetData strData
    Text1.Text = strData   '这里写收到服务端的信息后处理信息的代码
    End SubPrivate Sub sckClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Call sckClient_Close
    End Sub
    由客户端发送"QUIT"信息到服务端:sckClient.SendData "QUIT" 而服务端收到"QUIT"信息后如何处理就要看你自己需要怎么处理了~~
      

  4.   

    楼上的代码测试不行了...
    Server(0)是什么意思?
    为什么要Server(0)监听?
    搞不懂...
    还是麻烦高手解释一下子了...
      

  5.   

    服务器端:
    一winsock控件(tcpServer)
    一接收客户端的文本框(txtOutput)
    一发送文本的文本框(txtSendData)
    一发送按钮(Command1)
    Private Sub Form_Load()
    tcpServer.LocalPort = 1001
    tcpServer.ListenEnd SubPrivate Sub Command1_Click()
    tcpServer.SendData txtSendData.TextEnd SubPrivate Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
    If tcpServer.State <> sckClosed Then _
    tcpServer.Close
    tcpServer.Accept requestIDEnd SubPrivate Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    tcpServer.GetData strData
    txtOutput.Text = strDataEnd Sub
    客户端:
    一winsock控件(tcpClient)
    一接收客户端的文本框(txtOutput)
    一发送文本的文本框(txtSend)
    一连接服务器按钮(cmdConnect)
    一发送按钮(Command1)Private Sub Command1_Click()
    tcpClient.SendData txtSend.Text
    End SubPrivate Sub Form_Load()
       tcpClient.RemoteHost = "192.168.0.97"'指定远程主机
       tcpClient.RemotePort = 1001
    End SubPrivate Sub cmdConnect_Click()
        tcpClient.Connect
    End Sub
    Private Sub tcpClient_Connect()
    MsgBox "连接OK"
    End SubPrivate Sub tcpClient_DataArrival _
    (ByVal bytesTotal As Long)
       Dim strData As String
       tcpClient.GetData strData
       txtOutput.Text = strData
    End Sub这样够明了了吧。
      

  6.   

    这是最简单的代码了....
    可是离老师的要求还是有距离啊...
    我抓狂了>>>>>>>>>>>>>>
      

  7.   

    晕,已经很清楚了。
    在客户端向服务器端发送一条查询命令-->
    客户端中的
    Private Sub Command1_Click()
    tcpClient.SendData txtSend.Text
    End Sub
    类似实现的啊,总不会说查询命令都要给你写出来吧?!!!服务端同理可得...........如果你连一点编程基础都没有的话,就不要来提问了。