python - 通过 tcp python 发送字节

标签 python tcp byte

我将通过 python 通过 tcp channel 发送一个字节字符串, 位字符串有 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部分,而在byte部分。根据定义,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)))

关于python - 通过 tcp python 发送字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852062/

相关文章:

python - 如何根据百分比变化时间序列构建指数?

python进程池在每个进程上都有超时不是所有的池

c - TCP 客户端无法将字符串发送到服务器

android - 通过 xmpp 或 websocket 进行即时消息传递

TCP 在 UDP 上引起的数据包丢失和学士论文引用

python - 将字节字符串格式化为另一个字节字符串

java - 为什么字节数据在字节和字符串之间转换时会发生变化?

Python DELETE 字符(Unicode 7F)似乎没有做任何事情。它不应该删除后续字符,还是我做错了?

ios - Xcode 10.1 无法调用 'copyBytes'

我遇到的 Python 导入问题