![](/img/trans.png)
[英]Python 3 socket client sending data and C++ socket server receiving data with offset?
[英]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.