Python 通过套接字连接发送浮点数组
我正在测试一个简单的客户机/服务器套接字设置。从客户端=>服务器发送字符串值很容易,使用:Python 通过套接字连接发送浮点数组,python,python-3.x,sockets,Python,Python 3.x,Sockets,我正在测试一个简单的客户机/服务器套接字设置。从客户端=>服务器发送字符串值很容易,使用: 字节(我的字符串,“UTF-8”) 但是,现在我尝试发送一个数字数组(一些浮点数),我得到以下错误: Traceback (most recent call last): File "client.py", line 26, in <module> main2() File "client.py", line 22, in main2 s.send(bytes(samp
字节(我的字符串,“UTF-8”)
但是,现在我尝试发送一个数字数组(一些浮点数),我得到以下错误:
Traceback (most recent call last):
File "client.py", line 26, in <module>
main2()
File "client.py", line 22, in main2
s.send(bytes(sample))
TypeError: 'float' object cannot be interpreted as an integer
以及服务器代码,以备不时之需:
def main2():
import socket
s = socket.socket()
host = socket.gethostname()
port = 1247
s.bind((host,port))
s.listen(5)
while True:
try:
c, addr = s.accept()
print("Connection accepted from " + repr(addr[1]))
c.send(bytes("Server approved connection\n", "UTF-8"))
print(repr(addr[1]) + ": " + str(c.recv(1024)))
continue
except (SystemExit, KeyboardInterrupt):
print("Exiting....")
c.close()
break
except Exception as ex:
import traceback
print("Fatal Error...." + str(ex))
print(traceback.format_exc())
c.close()
break
if __name__ == '__main__':
main2()
struct.pack
和struct.unpack
将各种类型的数据打包成字节流:
>>> import struct
>>> sample = [0.9,120000,0.85,12.8,0.1,28,16,124565,0.72,3.9]
>>> data = struct.pack('<10f',*sample)
>>> print(data)
b'fff?\x00`\xeaG\x9a\x99Y?\xcd\xccLA\xcd\xcc\xcc=\x00\x00\xe0A\x00\x00\x80A\x80J\xf3G\xecQ8?\x9a\x99y@'
>>> data = struct.unpack('<10f',data)
>>> data
(0.8999999761581421, 120000.0, 0.8500000238418579, 12.800000190734863, 0.10000000149011612, 28.0, 16.0, 124565.0, 0.7200000286102295, 3.9000000953674316)
struct.pack
和struct.unpack
将各种类型的数据打包成字节流:
>>> import struct
>>> sample = [0.9,120000,0.85,12.8,0.1,28,16,124565,0.72,3.9]
>>> data = struct.pack('<10f',*sample)
>>> print(data)
b'fff?\x00`\xeaG\x9a\x99Y?\xcd\xccLA\xcd\xcc\xcc=\x00\x00\xe0A\x00\x00\x80A\x80J\xf3G\xecQ8?\x9a\x99y@'
>>> data = struct.unpack('<10f',data)
>>> data
(0.8999999761581421, 120000.0, 0.8500000238418579, 12.800000190734863, 0.10000000149011612, 28.0, 16.0, 124565.0, 0.7200000286102295, 3.9000000953674316)
什么意义上的“最佳”?这里有一些折衷(速度、准确度、复杂度、比特率)。在我的例子中,速度在什么意义上是“最好的”?这里有一些折衷(速度、准确度、复杂度、比特率)
>>> import json
>>> data = json.dumps(sample).encode()
>>> data # byte string
b'[0.9, 120000, 0.85, 12.8, 0.1, 28, 16, 124565, 0.72, 3.9]'
>>> json.loads(data) # back to list of floats
[0.9, 120000, 0.85, 12.8, 0.1, 28, 16, 124565, 0.72, 3.9]