[英]Python append string to bytearray and receive string from bytearray
我正在制造一個物聯網設備,該設備可以計算壓力,水流量並獲取設備的坐標。 我正在使用python套接字。 我需要將它們發送到Web應用程序。 但是,我總是得到以下輸出:
通過以下方式連接:(ip_address,端口)
49 46
這是我發送到網上的代碼:
#!/usr/bin/env python3
import socket
HOST = 'my_ip'
PORT = myPort
#Temp storage
pressure = "1.6"
waterflow = "2.6"
latitude = "08.123"
longitude = "124.336"
my_bytes = bytearray()
my_bytes.extend(pressure.encode('latin-1'))
my_bytes.extend(waterflow.encode('latin-1'))
my_bytes.extend(latitude.encode('latin-1'))
my_bytes.extend(longitude.encode('latin-1'))
#Ready to pass data to web
information = [pressure, waterflow, latitude, longitude]
#Open Connection and Establish
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(my_bytes)
這是接收數據的代碼:
#!/usr/bin/env python3
import socket
host = 'myHost'
port = myport
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by: ', addr)
while True:
data = conn.recv(1024)
my_bytes = bytearray(data)
print(my_bytes[0], my_bytes[1])
break
預期產量
1.6 2.6
我認為您可能想看看Python 數組模塊來存儲有效的數字值數組。
我重新編寫了您的代碼,以使用此模塊代替bytearray
。 現在,您的存儲變量是浮點數(而不是字符串),並因此通過網絡傳輸。 使用浮點數將比字符串更節省內存,以實現更高的精度。
import socket
import array
HOST = 'localhost'
PORT = 55000
#Temp storage
pressure = 1.6
waterflow = 2.6
latitude = 8.123
longitude = 124.336
information = [pressure, waterflow, latitude, longitude]
my_bytes = array.array('f', information) # 'f' = float
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(my_bytes)
和接收者:
import socket
import array
host = 'localhost'
port = 55000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by: ', addr)
data = conn.recv(1024) # blocking
my_bytes = array.array('f', data)
information = my_bytes.tolist()
print(information)
由於conn.recv()
是阻塞調用,因此出於演示目的,我刪除了接收器中的while
循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.