簡體   English   中英

Python將字符串追加到字節數組並從字節數組接收字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM