How can I send and receive WebSocket messages on the server side?

后端 未结 11 2026
轻奢々
轻奢々 2020-11-22 06:21
  • How can I send and receive messages on the server side using WebSocket, as per the protocol?

  • Why do I get seemingly random bytes at the server when

11条回答
  •  余生分开走
    2020-11-22 06:36

    Thank you for the answer, i would like to add onto hfern's(above) Python version to include the Sending function if any one is interested.

    def DecodedWebsockRecieve(stringStreamIn):
        byteArray =  stringStreamIn 
        datalength = byteArray[1] & 127
        indexFirstMask = 2 
        if datalength == 126:
            indexFirstMask = 4
        elif datalength == 127:
            indexFirstMask = 10
        masks = [m for m in byteArray[indexFirstMask : indexFirstMask+4]]
        indexFirstDataByte = indexFirstMask + 4
        decodedChars = []
        i = indexFirstDataByte
        j = 0
        while i < len(byteArray):
            decodedChars.append( chr(byteArray[i] ^ masks[j % 4]) )
            i += 1
            j += 1
        return ''.join(decodedChars)
    
    def EncodeWebSockSend(socket,data):
        bytesFormatted = []
        bytesFormatted.append(129)
    
        bytesRaw = data.encode()
        bytesLength = len(bytesRaw)
        if bytesLength <= 125 :
            bytesFormatted.append(bytesLength)
        elif bytesLength >= 126 and bytesLength <= 65535 :
            bytesFormatted.append(126)
            bytesFormatted.append( ( bytesLength >> 8 ) & 255 )
            bytesFormatted.append( bytesLength & 255 )
        else :
            bytesFormatted.append( 127 )
            bytesFormatted.append( ( bytesLength >> 56 ) & 255 )
            bytesFormatted.append( ( bytesLength >> 48 ) & 255 )
            bytesFormatted.append( ( bytesLength >> 40 ) & 255 )
            bytesFormatted.append( ( bytesLength >> 32 ) & 255 )
            bytesFormatted.append( ( bytesLength >> 24 ) & 255 )
            bytesFormatted.append( ( bytesLength >> 16 ) & 255 )
            bytesFormatted.append( ( bytesLength >>  8 ) & 255 )
            bytesFormatted.append( bytesLength & 255 )
    
        bytesFormatted = bytes(bytesFormatted)
        bytesFormatted = bytesFormatted + bytesRaw
        socket.send(bytesFormatted) 
    

    Usage for reading:

    bufSize = 1024     
    read = DecodedWebsockRecieve(socket.recv(bufSize))
    

    Usage for writing:

    EncodeWebSockSend(sock,"hellooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo")
    

提交回复
热议问题