我不懂WINSOCK 但是要实现C/系统,得用WINSOCK通信吧, 如何用VB实现呢?
这里请各位帮个忙,给我个例子参考学习一下下!

解决方案 »

  1.   

    客户端:
    Private Sub cmdConnect_Click()
        On Error GoTo ErrorPro     sckClient.Connect     Exit SubErrorPro:    MsgBox "服?器未?或网?出?!"    EndEnd SubPrivate Sub cmdSent_Click()
        sckClient.SendData txtSend.Text
    End SubPrivate Sub Form_Load()
        sckClient.RemoteHost = "127.0.0.1"
        sckClient.RemotePort = 1000
    End Sub
    Private Sub sckClient_Close()    MsgBox "服?器通道已??!"    EndEnd SubPrivate Sub sckClient_Connect()    MsgBox "?接成功!"
        
        cmdConnect.Enabled = FalseEnd SubPrivate Sub sckClient_DataArrival(ByVal bytesTotal As Long)    Dim s As String    sckClient.GetData s    lstReceive.AddItem sEnd 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)    sckClient.Close
        cmdConnect.Enabled = True
    End Sub
    服务端:
    Private MaxChan As IntegerPrivate Sub Form_Load()
        Dim i As Integer    MaxChan = 10     For i = 1 To MaxChan - 1     Load sckServer(i)    Next i    sckListen.LocalPort = 1000    sckListen.Listen
    End Sub
    Private Sub sckBusy_Close()
        sckBusy.Close
    End SubPrivate Sub sckBusy_DataArrival(ByVal bytesTotal As Long)
        sckBusy.SendData "服?器忙,?稍后再?接!"
        DoEvents
    End SubPrivate Sub sckListen_ConnectionRequest(ByVal requestID As Long)
        Dim i As Integer
        '决定由?一Winsock接受?求
        For i = 0 To MaxChan - 1
            If sckServer(i).State = 0 Then
                Exit For
            End If
        Next i    If sckServer(i).State = 0 Then
            sckServer(i).Accept requestID
            Exit Sub
        End If    '如果所有Winsock都用完?由??的“忙”Winsock接受?求,以免用?要求得不到??
        sckBusy.Close
        sckBusy.Accept requestIDEnd Sub
    Private Sub sckListen_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)
        sckListen.Close
        sckListen.LocalPort = 1000
        sckListen.Listen
    End Sub
    Private Sub sckServer_Close(Index As Integer)
        sckServer(Index).Close
    End Sub
    Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim s As String
        Dim i As Integer
        sckServer(Index).GetData s
        If UCase(Left(Trim(s), 2)) = "PT" Then '判断是否?悄悄?,点?点方式
            If IsNumeric(Mid(Trim(s), 3, 1)) Then
                i = Mid(Trim(s), 3, 1)
                sckServer(i).SendData "Channel " & Index & " " & Right(Trim(s), Len(Trim(s)) - 3)
                DoEvents
            End If
        Else '广播方式
            For i = 0 To MaxChan - 1
            '利用winsock的State属性?所有?接在服?器上的客??消息
                If sckServer(i).State = 7 Then
                    sckServer(i).SendData "Channel " & Index & " " & Trim(s)
                    DoEvents
                End If
            Next i
        End If
        lstReceive.AddItem "Channel " & Index & " " & Trim(s)
    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)
        sckServer(Index).Close
    End Sub
    控件就自己加下了,我就不一一说了.
    注:本例转载.