gpt4 book ai didi

java - Boost Asio io_service,从客户端读取消息

转载 作者:可可西里 更新时间:2023-11-01 02:52:58 26 4
gpt4 key购买 nike

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

我需要的行为是 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;
}
}

但是当我通过从客户端写入 session 来触发消息时,不会调用 handleRead。如果我做错了什么,请告诉我。

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

提前致谢。

最佳答案

首先这似乎是不正确的!

boost::array<char, 1> buf;

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

boost::array<char, 1500> buf;

除了缓冲区之外,我看不出您的代码有任何问题,只需检查您是否没有在同一个套接字上交错调用 async_read

关于java - Boost Asio io_service,从客户端读取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com