我想在C++中使用Boost ASio庫創建一個簡單的Tcp服務器。我寫了兩個類TcpConnection和TcpServer。Boost Asio io_service,從客戶端讀取消息
我需要的行爲是,Tcp服務器應該能夠發送消息到所有連接的客戶端,客戶端應該能夠註冊/註銷服務器。
我能夠實現從服務器發送的消息。從客戶那裏讀取部分內容並不成功。我的客戶端是用java寫的,使用apache mina。
服務器代碼
message = message + "\r\n";
const int bytesToSend = message.length();
boost::system::error_code error;
boost::asio::write(socket, boost::asio::buffer(message, bytesToSend), boost::asio::transfer_all(), error);
客戶端代碼
ConnectFuture future = ioConnector.connect(new InetSocketAddress(Port),
new TriggerReceiverHandler();
System.out.println("Message Receiver started and listening on port "+ Port);
IoSession session = future.getSession();
session.write(new String("TEst Message From Client"));
在服務器上的代碼閱讀的郵件使用async_read
boost::array<char, 1> buf;
boost::asio::async_read(socket, boost::asio::buffer(buf),
boost::bind(&TcpConnection::handleRead, this, buf, boost::asio::placeholders::error));
void TcpConnection::handleRead(boost::array<char, 1> buf, const boost::system::error_code& error)
{
if(!error)
{
std::cout << "Message: " << buf.data() << std::endl;
}
else
{
std::cout << "Error occurred." << std::endl;
}
}
完成,但handleRead是沒有得到所謂的當我通過從客戶端寫入會話觸發消息時。請告訴我,如果我做錯了什麼。
我將不勝感激任何幫助..請讓我知道是否需要任何進一步的信息。
在此先感謝。
我建議你用C++和Java編寫一個服務器和客戶端,以共同完成它們的操作。 Java客戶機和服務器應該能夠相互通話,並且也能夠與C++客戶機和服務器通信。這樣你可以診斷哪一端出現問題。 – 2011-01-06 11:53:58