提升Asio io_service,从客户端读取消息

时间:2011-01-06 11:47:31

标签: java c++ tcp boost-asio

我正在尝试使用Boost ASio Library在C ++中创建一个简单的Tcp服务器。我写了两个类TcpConnection和TcpServer。

我需要的行为是Tcp Server应该能够向所有连接的客户端发送消息,客户端应该能够注册/取消注册服务器。

我能够实现从服务器发送的消息。我没有成功阅读客户的部分内容。我的客户端是用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。如果我做错了,请告诉我。

我将不胜感激任何帮助。如果需要进一步的信息,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,这似乎不正确!

boost::array<char, 1> buf;

您正在声明一个大小为1的数组!我建议更大的东西!

boost::array<char, 1500> buf;

除了缓冲区之外,我看不出你的代码有什么问题,只是检查你是不是在同一个套接字上交错async_read个调用。