我将通过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)
Run Code Online (Sandbox Code Playgroud)
接收器代码:
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()
Run Code Online (Sandbox Code Playgroud)
我运行程序并使用 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
Run Code Online (Sandbox Code Playgroud)
因此,我不是发送字节,而是发送字符串。hex(ord('1')) == 0x31和hex(ord('0')) == 0x30。
我怎样才能真正发送字节?
问题不在于 TCP 部分,而仅在于字节部分。根据定义b"000010010000000000001001"是一个bytes包含 24个字节(不是位)的字节字符串(Python 3 中的类型)-注意:一个字节有 8 位...
所以你需要:
...
MESSAGE = b'\x09\x00\x09'
...
Run Code Online (Sandbox Code Playgroud)
或者至少
MESSAGE = b"000010010000000000001001"
MESSAGE = bytes((int(MESSAGE[i:i+8], 2) for i in range(0, len(MESSAGE), 8)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10123 次 |
| 最近记录: |