繁体   English   中英

通过TCP套接字python发送一个字节

[英]Send a single byte over TCP socket python

我正在尝试在python 3.x中编写一个返回单个字节数据以通过TCP连接发送的函数。

我尝试发送的数据是0-100之间的unsigned integer

我正在使用sys.getsizeof(data)检查数据使用的字节,但是我还没有遇到sys.getsizeof(data) == 1的实例。

假设data = 10

我尝试了几种不同的方式来存储字节:

 1) struct.pack('>b', 10)

 2) bytes(10), bytes([10])

 3) 0x10

 4) bytearray(10)

 5) b'10'

所有这些返回的字节大小都超过了两位数。

我正在寻找一种在python中通过TCP套接字发送单个字节的方法。

回答OP的基本问题:

我正在尝试通过TCP套接字发送该单个字节。

用于保留字节的Python表示形式无关紧要。 您不发送Python对象的副本,而是发送Python对象中包含的值。 由于socket.send()需要缓冲区或字符串,因此我希望您的函数返回一个字节字符串: b'\\x0a'应该可以工作。

这是一个简单的客户端程序,可以将一个字节恰好发送到服务器:

import socket

def return_one_byte():
    return b'\x10'

s = socket.socket()
s.connect(('localhost', 1234))
s.send(return_one_byte())
s.close()

Python不像C或C ++。 Python本质上具有高开销。 您不能将数据存储在内存中,而是获得一个存储在内存中的完整对象。

当您尝试类似

 1) struct.pack('>b', 10)
 2) bytes(10), bytes([10])
 3) 0x10
 4) bytearray(10)
 5) b'10'

这些不是将字节直接存储到内存中,而是创建python对象来存储字节数据。这就是sys.getsizeof(data) != 1

话虽这么说,但是有一种解决此问题的方法。 socket.send()需要缓冲区或字符串,而python具有字节字符串。 因此socket.send('\\x0a')将只发送一个字节。 您还可以从函数返回字节字符串。

def return_byte_string():
    return b'\x0a'

然后可以将其传递到socket.send(return_byte_string())以通过TCP连接发送单个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM