我使用SendMessage向客户端发送数据。如果字节长度大于125,则此Sub不起作用。如果字节长度小于125,一切正常。例如字节长度为138的脚本不工作下面是代码;
Sub SendMessage(sck As Socket, message As String)
Dim rawData = System.Text.Encoding.UTF8.GetBytes(message)
Dim frameCount = 0
Dim frame(10) As Byte
frame(0) = CByte(129)
Console.WriteLine("bukar:" & rawData.Length)
If rawData.Length <= 125 Then
frame(1) = CByte(rawData.Length + 1)
frameCount = 2
ElseIf rawData.Length >= 126 AndAlso rawData.Length <= 65535 Then
frame(1) = CByte(126)
Dim len = CByte(rawData.Length + 1)
frame(2) = CByte(((len >> 8) & CByte(255)))
frame(3) = CByte((len & CByte(255)))
frameCount = 4
Else
frame(1) = CByte(127)
Dim len = CByte(rawData.Length + 1)
frame(2) = CByte(((len >> 56) & CByte(255)))
frame(3) = CByte(((len >> 48) & CByte(255)))
frame(4) = CByte(((len >> 40) & CByte(255)))
frame(5) = CByte(((len >> 32) & CByte(255)))
frame(6) = CByte(((len >> 24) & CByte(255)))
frame(7) = CByte(((len >> 16) & CByte(255)))
frame(8) = CByte(((len >> 8) & CByte(255)))
frame(9) = CByte((len & CByte(255)))
frameCount = 10
End If
Dim bLength = frameCount + rawData.Length
' Console.WriteLine(frameCount)
'Console.WriteLine(rawData.Length)
Dim reply(bLength) As Byte
Dim bLim = 0
For i = 0 To frameCount - 1
' Console.WriteLine(bLim)
reply(bLim) = frame(i)
bLim += 1
Next
For i = 0 To rawData.Length - 1
' Console.WriteLine(bLim)
reply(bLim) = rawData(i)
bLim += 1
Next
'For i = 0 To reply.Length - 1
'Console.WriteLine("Byte: " & reply(i))
'Console.WriteLine("Char: " & CByte(reply(i)))
'Next
sck.Send(reply, reply.Length, 0)
End Sub
我对VB了解不多,但对WebSockets了解一点。
一个138字节的完整消息的帧头应该是4字节:
0 - 129
1 - 126
2 - 0
3 - 138
检查你的代码是否产生了这个头。
我为。net/mono开发了一个WebSocket服务器连接器,检查GitHub中的源代码,它可能会解决你的一些问题。更不用说你也可以使用VB中的库了。
欢呼。