2014-11-30 3 views
0

서버에서 클라이언트로 개체를 보내려고합니다. UDP를 통해. C++에서. 간단히 클라이언트에 대한 참조를 보내고이 주소를 참조하도록 클라이언트에 포인터를 만들려고했습니다. 내가 뭘하려에 대한 코드는 다음과 같습니다개체 전송 TCP/UDP를 사용하는 클라이언트/서버

데이터 :

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"; 
+1

네트워크를 통해 개체에 대한 참조를 보낼 수는 없습니다. 클라이언트가 다른 컴퓨터에 있으면 서버 컴퓨터의 메모리에 액세스 할 수 없으며 개체에 액세스 할 수 없습니다. 객체 내부의 정보를 바이트로 나누고, 보내고, 클라이언트에서 파싱하고, 파싱 된 정보에서 객체를 생성하는 것이 좋습니다. – snixtho

+0

네, 맞습니다. 나는 그 것을 고려하지 않았다. 클라이언트와 서버가 같은 컴퓨터에 있었기 때문에 내가이 방법으로 그렇게했습니다. 이제 문제가 생겼어. 감사. – user2831683

답변

0

해결 문제. 나는 @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"; 

이 문제를 해결하지만, 내가 거기에 거라고 확신 해요 이렇게하는 다른 좋은 방법이 될 수 있습니다.

관련 문제