我想问一下,winsock 可不可以用十六进制输入输出?
好像是不是都要用二进制,然后再化成十六进制的?
比如我下面这个程序:服务器端输出一个100字节长的数组给客户端,但是我在客户端始终接收到的都是65,改变输入也是输出65,我不知道为什么?
服务器端的部分程序:
Private Sub Winsockserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)Dim getstr As String
Buff(0) = &HFF
 If Index = 0 Then     intMax = intMax + 1     Load Winsockserver(intMax)     Winsockserver(intMax).LocalPort = 0     Winsockserver(intMax).Accept requestID
     
     Winsockserver(intMax).SendData "A" & Chr(13) & Chr(10) '  发送A给客户端,开通通道
    
       For i = 1 To 8
       If port_number(i) = 1 Then '如果通道被选中,则发送连接信号
       Winsockserver(intMax).SendData "连接通道" & i & Chr(13) & Chr(10)       End If
       Next
       Buff(1) = &H0
    For i = 1 To 8
       If port_number(i) = 1 Then
       Buff(2) = Hex(i)
       Select Case qus
              Case 20000
              Buff(3) = &H0
              Case 10000
              Buff(3) = &H1
              Case 5000
              Buff(3) = &H2
              Case 2000
              Buff(3) = &H3
              Case 1000
              Buff(3) = &H4
              Case 500
              Buff(3) = &H5
              Case 200
              Buff(3) = &H6
              Case 100
              Buff(3) = &H7
              Case 50
              Buff(3) = &H8
              Case 20
              Buff(3) = &H9
              Case 10
              Buff(3) = &HA
              Case Else
        End Select
              Winsockserver(intMax).SendData Buff
        End If
    Next
End If
End Sub
----------------------------------------------------
客户端程序:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim Buff(99) As Byte
Winsock.GetData Buff(0)
Text2.Text = Buff(0)
Winsock.SendData "hello" & Chr(13) & Chr(10)
End Sub
在线等

解决方案 »

  1.   

    客户端程序更改了一下: 
    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) 
    Dim Buff(99) As Byte 
    Winsock.GetData Buff(99) 
    Text2.Text = Buff(99) 
    Winsock.SendData "hello" & Chr(13) & Chr(10) 
    End Sub 
    但是始终显示255,为什么呢?
      

  2.   

    也就是说如何发送一个100字节长的数组?
    这样可不可以呢?
                    For j = 0 To 99
                  Winsockserver(intMax).SendData ByVal Buff(j)
                  Next j
      

  3.   

    Winsock.GetData Buff
    或者
    Winsock.SendData Buff如果用buff(99)就只是buff()数组中的第100个元素而不是整个数组。
      

  4.   

    都换成buff就什么东西都接收不到了
      

  5.   


    '发送
    dim Data as string
    for i=0 to 99
      data=data & buff(i) & "|"
    nextWinsock.SendData Data'接收
    dim Data() as string
    dim bakData as string
    Winsock.SendData bakData
    data=split(bakData,"|")
      

  6.   

    发送端SendData前首先请确定buff数组不是空的,在接收端设置断点看看有没有Winsock_DataArrival事件发生,有的话bytesTotal是多少,然后再GetData到一个合适大小的数组里就行了。
      

  7.   

    数组不为空,Winsock_DataArrival事件值为7,说明有Winsock_DataArrival事件发生。但是怎么查看bytesTotal是多少?
      

  8.   

    msgbox bytestotal
    debug.print bytestotal
    断点,F8单步
      

  9.   

    你说的是winsock.state的值是7吧?那只是说winsock当前状态是正常连接。
    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) 
      debug.print bytestotal '在这里看看接收到的字节是多少,有可能与发送端发送的字节数不相等哦
    End Sub 
      

  10.   

    winsock.state的值是7, debug.print bytestotal 的值是100,输入也是100字节
      

  11.   

    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
      dim a(bytesTotal-1) as byte
      winsock.getdata a 
    End Sub 
    这样a()这个数组不就是接收到的数据了吗?