通过 TCP 套接字发送单个字节 python
Send a single byte over TCP socket python
我正在尝试在 python 3.x 中编写一个函数 returns 通过 TCP 连接发送一个字节的数据。
我要发送的数据是 unsigned integer
从 0-100。
我正在使用 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 的基本问题:
I am trying to send that single byte over a TCP socket.
用于保存字节的 Python 表示是无关紧要的。您不发送 Python 对象的副本,而是发送 Python 对象中包含的值。由于 socket.send()
需要一个缓冲区或字符串,我会让你的函数 return 一个字节串: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')
会发送一个字节。您还可以 return 来自函数的字节字符串。
def return_byte_string():
return b'\x0a'
然后可以将其传递到 socket.send(return_byte_string())
以通过 TCP 连接发送单个字节。
我正在尝试在 python 3.x 中编写一个函数 returns 通过 TCP 连接发送一个字节的数据。
我要发送的数据是 unsigned integer
从 0-100。
我正在使用 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 的基本问题:
I am trying to send that single byte over a TCP socket.
用于保存字节的 Python 表示是无关紧要的。您不发送 Python 对象的副本,而是发送 Python 对象中包含的值。由于 socket.send()
需要一个缓冲区或字符串,我会让你的函数 return 一个字节串: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')
会发送一个字节。您还可以 return 来自函数的字节字符串。
def return_byte_string():
return b'\x0a'
然后可以将其传递到 socket.send(return_byte_string())
以通过 TCP 连接发送单个字节。