【问题标题】:WebSocket Server, client -> server frame maskWebSocket 服务器,客户端 -> 服务器帧掩码
【发布时间】:2018-06-25 11:16:37
【问题描述】:

我正在尝试在 vb.net 中编写一个简单的 WebSocket 服务器。我能够建立连接并将数据从服务器发送到客户端。我无法解码从客户端发送的帧。我只能解码其中的一部分。

我试图从这个答案中实现伪代码:How can I send and receive...,但正如我所说 - 我只能解码部分帧。

这是我从客户端解码帧的代码:

bytesLen = netStream.Read(bytesArray, 0, bytesArray.Length)

If bytesArray.Length > 1 Then
    Msg("---------------------------------------------------")
    Msg("data type: " & bytesArray(0))

    Dim secondByte As Byte = bytesArray(1)
    Dim theLength As UInteger = secondByte And 127
    Dim indexFirstMask As Integer = 2
    If theLength = 126 Then
        indexFirstMask = 4
    ElseIf theLength = 127 Then
        indexFirstMask = 10
    End If
    Msg("indexFirstMask: " & indexFirstMask)
    Dim masks As New List(Of Byte)

    Dim x As Integer = indexFirstMask
    While (x < indexFirstMask + 4)
        masks.Add(bytesArray(x))
        x += 1
    End While

    Dim indexFirstDataByte = indexFirstMask + 4
    Dim decoded(bytesLen - indexFirstDataByte) As Byte

    Dim i As Integer = 0, j As Integer = 0
    For i = indexFirstDataByte To bytesLen Step 1
        Dim mask As Byte = masks(j Mod 4)
        Dim encodedByte As Byte = bytesArray(i)
        decoded(j) = (encodedByte Xor mask)
        j += 1
    Next

    Msg("FROM CLIENT: '" & System.Text.Encoding.UTF8.GetString(decoded) & "'")
    SendMessage(sck, "CONNECTION_OK")
End If

我已经多次检查了这段代码,每次都无法从上面的答案中找到伪代码之间的任何区别。

我做错了什么?

【问题讨论】:

    标签: vb.net sockets websocket


    【解决方案1】:

    我自己解决了我的问题。有修复:

    Dim indexFirstMask As Integer = 1
    If theLength = 126 Then
        indexFirstMask = 3
    ElseIf theLength = 127 Then
        indexFirstMask = 9
    End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2016-02-01
      相关资源
      最近更新 更多