Websocket VB Server大数据发送

时间:2014-06-14 11:05:01

标签: vb.net websocket

我使用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

1 个答案:

答案 0 :(得分:0)

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

138字节的完整消息的帧头应为4字节:

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

检查您的代码是否正在生成该标头。

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

干杯。