Я хочу отправить объект с сервера на клиент. Через UDP. В c++. Я попытался просто отправить ссылку на клиента и сделать указатель на клиенте для обращения к этому адресу. Код за то, что я пробовал:
данные:
class data
{
private:
int number;
public:
data(int number) {
this->number = number;
}
void print() {
cout<<"number : "<<number;
}
};
сервер:
data *obj;
if (recvfrom(conn_sock, obj, sizeof(data), 0, (struct sockaddr*)&client_addr, &slen) == -1)
cout<<"ERROR: recvfrom()";
else cout<<"SUCCESS: recvfrom()";
cout<<"\nRECEIVED from Client : ";
obj->print();
клиент:
data *obj = new data(11);
if(sendto(conn_sock, &obj, sizeof(data), 0, (struct sockaddr*)&serv_addr, addr_len) == -1)
cout<<"ERROR: Problem sending data";
else cout<<"SUCCESS: sending object";
Решила, проблема. Я сделал так же, как предложил @snixtho. Рабочий код:
данные:
class data
{
private:
int number;
float gpa;
public:
data(int number, float gpa) {
this->number = number;
}
void print() {
cout<<"number : "<<number<<"gpa : "<<gpa;
}
int getNumber() {
return this->number;
}
int getGpa() {
return this->number;
}
};
сервер:
data *obj;
int number = 0;
float gpa = 0.0;
if (recvfrom(conn_sock, buf, buff_length, 0, (struct sockaddr*)&client_addr, &slen) == -1)
cout<<"ERROR: recvfrom()";
number = atoi(buf);
if (recvfrom(conn_sock, buf, buff_length, 0, (struct sockaddr*)&client_addr, &slen) == -1)
cout<<"ERROR: recvfrom()";
gpa = atoi(buf);
obj = new data(number, gpa);
cout<<"\nRECEIVED from Client : ";
obj->print();
cout<<"\n\n";
клиент:
data *obj = new data(11, 3.2);
int n=0; // n is the number of bytes of 'buf' after converting the integer to 'buf'
n = sprintf(buf, "%d", obj->getNumber());
if(sendto(conn_sock, buf, buff_length, 0, (struct sockaddr*)&serv_addr, addr_len) == -1)
cout<<"ERROR: Problem sending data";
n = sprintf(buf, "%f", obj->getGpa());
if(sendto(conn_sock, buf, buff_length, 0, (struct sockaddr*)&serv_addr, addr_len) == -1)
cout<<"ERROR: Problem sending data";
Это решение проблемы, но я уверен, что будет и другой лучший способ сделать это.