我想问一下,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
在线等
好像是不是都要用二进制,然后再化成十六进制的?
比如我下面这个程序:服务器端输出一个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
在线等
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,为什么呢?
这样可不可以呢?
For j = 0 To 99
Winsockserver(intMax).SendData ByVal Buff(j)
Next j
或者
Winsock.SendData Buff如果用buff(99)就只是buff()数组中的第100个元素而不是整个数组。
'发送
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,"|")
debug.print bytestotal
断点,F8单步
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
debug.print bytestotal '在这里看看接收到的字节是多少,有可能与发送端发送的字节数不相等哦
End Sub
dim a(bytesTotal-1) as byte
winsock.getdata a
End Sub
这样a()这个数组不就是接收到的数据了吗?