Я пытаюсь отправить карту, состоящую из int и другой карты, через сокет TCP в linux.
карта имеет вид
map<int, map<string, double>>
После этой ТАКОЙ ссылки Я пытался сделать
unsigned char* mybytemap = reinterpret_cast<unsigned char*>(&my_map);
Затем для отправки в буфер я использовал функцию write () следующим образом:
int size = sizeof(mybytemap);
char temp[10];
sprintf(temp, "%d", size);
write(sockfd, temp, strlen(temp)); //send the size for the client
write(sockfd, mybytemap, sizeof(mybytemap));
На стороне клиента:
char temp[10];
n = read(sockfd, temp, 10);
size = stoi(temp); //Got Size Of buffer
unsigned char * buf;
if(size != 0)
{
buf = new unsigned char[size];
int current=0;
while(current<size)
{
n = read(sockfd,(unsigned char*)(buf)+current, min(1024,size-current));
if (n <= 0)
{
cout<<"ERROR reading from socket when receiving"<<endl;
break;
}
current+=n;
}
}
map<int, map<string, double>> *test = reinterpret_cast< map<int, map<string, double>>* > (buf);
vector<int> ks;
for(map<int, map<string, double>>::iterator it = test->begin(); it != test->end(); ++it)
{
ks.push_back(it->first);
cout<<"id: "<<it->first<<endl;
}
но карта не была получена правильно и код сбоя при попытке доступа к данным. как это исправить?
Нужно ли мне XML карту? и если да, то может ли кто-нибудь подсказать мне, как это сделать?