【发布时间】:2013-09-04 09:15:04
【问题描述】:
我已经声明了地图:
std::map <std::string, int> mymap;
我想在上面的地图中插入两个值
*vit 和 hit->first 然后通过套接字发送和接收。
我的代码:
for (std::map < int, std::vector < std::string > >::iterator hit = three_highest.begin(); hit != three_highest.end(); ++hit) {
for (std::vector < std::string >::iterator vit = (*hit).second.begin(); vit != (*hit).second.end(); vit++) {
std::cout << hit->first << ":";
std::cout << *vit << "\n";
mymap.insert( std::pair<std::string,int> (*vit,hit->first)); //Is it correct way
}
}
//然后通过socket发送
if ((bytecount = send(*csock, mymap , sizeof(mymap), 0)) == -1) { // I think this is wrong, Can someone correct it?
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
在接收端如何取回这两个变量?
std::map <std::string, int> mymap;
if((bytecount = recv(hsock, mymap, sizeof(mymap), 0))== -1){ //Needs help here also
// getting mymap->first, mymap->second.
fprintf(stderr, "Error receiving data %d\n", errno);
}
【问题讨论】:
-
您不能发送/接收任何复杂的数据结构,例如网络上的指针。指针只在你得到指针的进程中有效,其他进程不能使用该指针。
-
你不能这样做。您必须创建一个协议并根据该协议发送数据。你不能说“发送这个数据结构”并在另一边接收它。至少如果 D.S. 不仅仅是一个没有分配动态内存的结构。
-
如果您认为要通过此处所写的套接字发送 std::map,请三思。您需要发送数据in地图并在另一边重建它。
-
@JoachimPileborg 恶作剧
-
@P0W:同一个研究所!