簡體   English   中英

從 C++ 服務器到 python 客戶端接收不同大小的字節

[英]receiving bytes in different sizes from c++ server to python client

我正在嘗試將從 C++ 服務器的文件夾中拍攝的一些圖像發送到 Python 客戶端。 我已經設法將大小作為整數發送/接收,但現在我必須發送/接收實際圖像。 由於圖像大小不同,我希望客戶端根據圖像大小拆分字節。

我有點迷茫,因為我現在正在使用一個參數,例如recv(1024)並且我收到的字節數比我發送的字節多得多。 所以我不太確定發生了什么。

服務器

    ifstream stream(nm, std::ios::in | std::ios::binary);
if(stream.is_open())
    {


vector<char> imageDataVec((istreambuf_iterator<char>(stream)), istreambuf_iterator<char>());
cout << "Size=of=image=== " << imageDataVec.size() << " bytes";
long conv_num= htonl(imageDataVec.size());
//send(new_socket, &converted_number, sizeof(converted_number), 0);
//send(new_socket, &imageDataVec, imageDataVec.size() , 0);

//size_t sent{};
int nbytes=0;  

while (1) 
    {

    //send(new_socket, &conv_num, sizeof(conv_num), 0);
     nbytes = send(new_socket, &imageDataVec, imageDataVec.size(), 0);
//continue;
    if (nbytes <= 0) {
        std::clog << "error: while sending image\n";
        break;
}
    else
{
    //sent += nbytes;
    cout<<nbytes<<"=====1=1=1=1========"<<"bytes"<<endl;}
                       break;

    }
//fclose(fin);
}
else
{cout<<"can't open folder"<<endl;}

客戶

 while(1):
    pic_bytes=s.recv(8)
    pic_bytes_amount=int.from_bytes(pic_bytes, byteorder='big', signed=False)
    print("received bytes======{}".format(pic_bytes_amount))
    f=open('pic.jpeg','wb')
    f.write(pic_bytes)
    f.close()

1)您將向量的地址寫入套接字似乎很奇怪。

我認為發送應該是這樣的:

send(new_socket, imageDataVec.data()...);

2)據我了解,在客戶端,您正在嘗試讀取 8 字節長度的整數。 但我沒有看到服務器在哪里寫入這些數據。

3) 使用 int64_t 而不是 long 類型,因為您無法確定 long 大小。

暫無
暫無

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

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