2010-05-12 5 views
0

안녕하세요.Boost.Asio async_write/async_read - 프로그램이 제대로 통신하지 않습니다.

나는 boost :: asio를 사용하여 질문 - 답변 논리를 구현하려고합니다.

void Send_Message() 
{ 
.... 
boost::asio::async_write(server_socket, boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Client::Handle_Write_Message, this, boost::asio::placeholders::error)); 
.... 
} 


void Handle_Write_Message(const boost::system::error_code& error) 
{ 
.... 
std::cout << "Message was sent.\n"; 
.... 
boost::asio::async_read(server_socket_,boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Client::Handle_Read_Message, this, boost::asio::placeholders::error)); 
.... 
} 

void Handle_Read_Message(const boost::system::error_code& error) 
{ 
.... 
std::cout << "I have a new message.\n"; 
.... 
} 

를 서버에 나는이 "같은 - 논리"코드 : 클라이언트에

나는이 그냥 구조의

void Read_Message() 
{ 
.... 
boost::asio::async_read(client_socket, boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Server::Handle_Read_Message, this, boost::asio::placeholders::error)); 
.... 
} 


void Handle_Read_Message(const boost::system::error_code& error) 
{ 
.... 
std::cout << "I have a new message.\n"; 
.... 
boost::asio::async_write(client_socket_,boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Server::Handle_Write_Message, this, boost::asio::placeholders::error)); 
.... 
} 


void Handle_Write_Message(const boost::system::error_code& error) 
{ 
.... 
std::cout << "Message was sent back.\n"; 
.... 
} 

메시지.

그리고 클라이언트의 출력은 다음과 같습니다 I have a new message.

그리고 그게 다야 : 서버에 Message was sent. 출력이다. 이 두 프로그램은 여전히 ​​작동하지만 아무 일도 일어나지 않습니다. 내가 좋아하는 코드를 구현하기 위해 노력 :

if (!error) 
{ 
.... 
} 
else 
{ 
// close sockets and etc. 
} 

을하지만 읽기 또는 쓰기에 오류가 없습니다. 두 프로그램 모두 정상적으로 실행되지만 서로 상호 작용하지 않습니다. 이 코드는 매우 분명하지만 작동하지 않는 이유를 이해할 수 없습니다.

미리 조언 해 주셔서 감사합니다.

답변

0

기본 소켓이 유닉스 또는 inet 소켓입니까?

tcpdump 또는 wireshark와 같은 도구를 사용하여 클라이언트와 서버 간의 교환을 볼 수 있습니다.

0

나는 boost :: asio :: io_service에서 항상 run() 또는 poll()을 호출하는 것을 잊는다. 전화 하시겠습니까? 부스트는 보내기/받기 위해 주기적으로 호출되어야합니다.

+0

io_service는 boost :: asio : boost :: thread t (boost :: bind (& boost :: asio :: io_service :: run, & io_service)) 예제와 같이 실행 중입니다. – Max

관련 문제