簡體   English   中英

Python套接字接收和存儲數據

[英]Python socket receive and store data

我已經在C ++程序和python腳本之間建立了一個套接字。 一切都很簡單,我想從C程序向Python發送大約20 Hz的坐標。 這只是第一次嘗試,我想發送一組坐標,如下所示:

C ++程序,服務器:

struct coord {
    int x;
    int y;
    int z;
 };

struct coord co;

co.x = 1;
co.y = 2;
co.z = 3;


char *msg;
msg = (char*) &co;

send(newsockfd, msg,strlen((char*) &co), 0);

這是重要的部分,在此之前我已經成功地初始化了具有特定地址的套接字。 現在,我想將這三個坐標發送到python程序。 我將地址發送到第一個整數(co.x)和分配的內存,該內存應為12個字節。

這是python腳本。 同樣,我只包含了重要的內容。

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(server_address)
recvInt = sock.recv(4096)

現在,我想訪問前4個字節並將其存儲在變量中,然后將后4個存儲在單獨的變量中,將后4個存儲在第三個變量中。 但是我該怎么做呢? recvInt是這個看似無用的對象Byte,我沒有設法將其轉換為任何東西,並且打印輸出也沒有任何意義。 有人可以幫我還是指出正確的方向?

編輯:當我執行以下打印輸出:type(recvInt)時說它是一個str。 考慮到函數socket.recv()的文檔也很奇怪,該文檔明確聲明它返回了一個字節。 但是,現在我也找到了文檔,該函數應返回數據的字符串表示形式。 哪個是對的? 這個假定的字符串表示形式只是一個帶有四個數字的小盒子,看起來像一個字節的可視表示形式。 但是msg包含12個字節,並且recvInt上沒有索引。 謝謝

看一下python的struct庫。

本質上,對於您的情況,類似以下的內容可能會起作用。

import struct

x, y, z = struct.unpack("!iii", receivedData)

上面的代碼會將收到的字符串解析為3個帶符號的整數。

socket.recv返回一個二進制字符串,該字符串本質上是一個字節數組。 Python沒有為recvInt或parseInt提供單獨的函數,而是提供了一個庫來將任意二進制字符串解析為不同大小的整數或字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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