簡體   English   中英

通過TCP Python發送字節

[英]Send byte over tcp python

我將通過python在tcp通道上發送一個字節字符串,該位字符串具有3個字節“ 000010010000000000001001”,如果我將其視為3個整數,則為“ 909”

發件人代碼:

import socket
import struct
TCP_IP = '127.0.0.1' 
TCP_PORT = 5005      
BUFFER_SIZE = 1024
MESSAGE = b"000010010000000000001001"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print( "received data:", data)

接收方代碼:

import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address:', addr)
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print( "received data:", data)
    conn.send(data)  
conn.close()

我運行程序並使用Wireshark捕獲數據,數據包完全不同,以十六進制表示:

30 30 30 30 31 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30 31

因此,我不是發送字節,而是發送字符串。 hex(ord('1')) == 0x31hex(ord('0')) == 0x30

我怎樣才能真正發送字節?

問題不在於TCP部分,而僅在於字節部分。 根據定義b"000010010000000000001001"是一個字節字符串(Python 3中的bytes類型),包含24 個字節 (不是位)-注意:一個字節有8位...

因此,您需要:

...
MESSAGE = b'\x09\x00\x09'
...

或至少

MESSAGE = b"000010010000000000001001"
MESSAGE = bytes((int(MESSAGE[i:i+8], 2) for i in range(0, len(MESSAGE), 8)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM