2014-06-14 177 views
0

Iam使用SendMessage向客户端发送数据。如果字节长度大于125,则该Sub不起作用。如果字节长度小于125则一切正常。例如字节长度是138脚本不工作 这里是代码;Websocket VB服务器大数据发送

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 

回答

0

我不太了解VB,但我对WebSockets有一点了解。

为138个字节的完整的消息帧报头应该是4个字节:

0 - 129 
1 - 126 
2 - 0 
3 - 138 

检查如果您的代码产生该首部。

我开发了一个WebSocket server connector for .NET/Mono,检查GitHub的源代码,它可能会解决你的一些问题。更何况你也可以使用VB的库。

干杯。