本帖最后由 timdex 于 2009-06-05 02:20:17 编辑

解决方案 »

  1.   

    ReDim a(43) As Byte   '去掉让WINSOCK控件自己给你扩维.每次收到的数据并不一定是你发多少收多少的.你把每次的任何数据都收回来,然后再从中把有用的数据还原.
      

  2.   

    1楼老马思路正确,以下是经调试的代码,由COM口接收数据通过WINSOCK转发:
    Option ExplicitPrivate Sub Command1_Click()
        End
    End Sub
    Private Sub Command2_Click()
         Winsockclient.Connect
    End SubPrivate Sub Form_Load()
        textsend.Visible = False
        textget.Visible = False
        Winsockclient.RemotePort = 1024
        Winsockclient.RemoteHost = "192.168.1.3" '服务器地址按你实际改
        textsend.Text = ""
        textget.Text = ""
        Text1.Text = "192.168.1.3" 
        MSComm1.PortOpen = True
        MSComm1.InputMode = comInputModeBinary
        MSComm1.RThreshold = 1
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        End
    End SubPrivate Static Sub MSComm1_OnComm()
        Dim sData() As Byte
        Dim Buffer As Variant
        Dim i As Integer
        Select Case MSComm1.CommEvent
            Case comEvReceive
                Buffer = MSComm1.Input
                sData() = Buffer
                Winsockclient.SendData sData
        End Select
    End Sub
    Private Sub Winsockclient_Close()
        Winsockclient.Close
        End
    End SubPrivate Sub winsockclient_Connect()
        textsend.Visible = True
        textget.Visible = True
        Command2.Visible = False
    End Sub
    Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)
        Dim tmpstr As String
        Winsockclient.GetData tmpstr
        textget.Text = tmpstr
    End Sub
      

  3.   

    服务器代码:
    Option Explicit
        Dim tmpstr As String
    Private Sub Command1_Click()
        End
    End SubPrivate Sub Form_Load()
        textsend.Visible = False
        textget.Visible = False
        Winsockserver.LocalPort = 1024
        Winsockserver.Listen
    End SubPrivate Sub Winsockserver_Close()
        Winsockserver.Close
         'End
    End SubPrivate Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
        textsend.Visible = True
        textget.Visible = True
        If Winsockserver.State <> sckClosed Then Winsockserver.Close
        Winsockserver.Accept requestID
    End Sub
    Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
        Dim buf() As Byte
        Dim i As Integer
        Winsockserver.GetData buf
        For i = 0 To UBound(buf)
            tmpstr = tmpstr & Right("0" & Hex(buf(i)), 2)
        Next
        textget.Text = tmpstr
    End Sub