Я пытаюсь реализовать программу для отправки структуры через сокет C++ с клиента на сервер.Отправка структуры через сокет
Что я до сих пор работаю нормально на своем собственном компьютере (как на сервере, так и на клиенте на моем собственном компьютере), но я подозреваю, что у меня могут быть проблемы при запуске сервера и клиента на разных компьютерах.
То, что я до сих пор:
struct myStruct
{
int whatever;
};
//Sender
myStruct obj;
obj.whatever = 123;
char *byteStream = (char *) &obj;
write(socketFD, byteStream, sizeof(myStruct));
//Receiver
char *byteStream = new char[sizeof(myStruct)];
read(socketFD, byteStream, sizeof(myStruct));
myStruct *received = (myStruct *) byteStream;
cout<<received->whatever;
Оператор соиЬ на þér отпечатков приемника 123.
Предупреждение: если вы используете сокеты TCP, то вызов 'read' может принимать * меньше *, чем то, что было отправлено, и вы должны прочитать в цикле, чтобы получить все. Не очень вероятно, с такой небольшой структурой, но все же о чем подумать. –
Еще одно предупреждение: если вы отправляете структуру, содержащую указатели, эти указатели будут отправляться «как есть», но то, что они указывают, не будет отправлено. Таким образом, на принимающей стороне у вас есть отклоненные указатели в структуре. Кроме того, вы можете с легкостью отправлять указатели от одного процесса к другому на одном компьютере, на картах виртуальной памяти и все такое, поэтому еще меньше будет отправлять указатель на совершенно другой компьютер. –
Данные не содержат указателей. Также я буду использовать UDP-сокет для этого назначения. –