2010-12-07 5 views
1

저는 수업이 매우 어리 석습니다. 이 클래스의 객체는 boost를 통해 asio를 사용하여 tcp를 통해 전송하려고합니다. 내 클래스 올바르게 boost 물건을 우정을 만들고 serialize 메서드를 구현합니다.C++ 채널에서 TCP 직렬화 된 객체를 강조 표시합니다. 양방향 통신이 작동하지 않습니다.

글쎄, 클라이언트가 서버에 연결하고 내 개체를 보낸 다음 서버가 같은 클래스의 다른 개체를 다시 보내길 원합니다. 서버에서

:

Data data; 
int port = 2040; 
boost::asio::io_service io_s; 
tcp::acceptor data_acceptor(io_s, tcp::endpoint(tcp::v4(), port)); 
tcp::iostream data_stream; 
Data data_recv; 
data_acceptor.accept(*(data_stream.rdbuf())); /* Accepting */ 
boost::archive::binary_iarchive ia(data_stream); 
ia >> data_recv; 
boost::archive::binary_oarchive oa(data_stream); /* LINE Y */ 
oa << data; /* LINE X */ 
data_stream.close(); 

데이터 직렬화 클래스입니다

나는이 일을 시도했다. 클라이언트에서

:

Data data_send; 
Data data_recv; 
tcp::iostream data_stream("127.0.0.1", "2040"); /* Creating TCP stream */ 
boost::archive::binary_oarchive oa(data_stream); 
oa << data_send; 
boost::archive::binary_iarchive ia(data_stream); /* LINE Q */ 
ia >> data_recv; /* Receive LINE W */ 
data_stream.close(); 

글쎄, 그것은 작동하지 않습니다. 그것은 어떻게 든 막는다.

문제는이 양방향 체계이기 때문에 골동품입니다. 선 Q, W, X, Y IT WORKS를 제거하면 !!! 이 문제를 해결하는 방법을 알고 계십니까?

+0

클라이언트에 스트림에 플러시 호출 할 필요가? 거기에'data_recv' 만 보입니다. 나는 라인 X를 언급하고있다. – chrisaycock

+0

그래, 미안하지만, 나는 실수로 복사하고있다. 나는 수정을 게시했다 ... – Andry

+0

클라이언트가 라인 Q 또는 W를 막고 있는지 알고 있니? 서버와 비슷합니다. – chrisaycock

답변

2

당신은`data` 서버에 정의되는 경우

oa << data_send; 
data_stream.flush();