Boost::asio:只有在出现其他连接后才接收数据
Boost::asio: data get received only after other connection appeared
我试图在我的应用程序中使用代码示例。在连接时,客户端向服务器发送"hello!"服务器接收它并以某种方式回答它(并以"嗨,客户端!"我是服务器!")-但这就是我所拥有的:服务器不接收任何东西,直到我通过telnet连接到它并发送一些东西。之后,它接收(打印)客户端和telnet消息。
客户:socket.connect(tcp::endpoint(tcp::v4(), 21), error);
if (error)
throw boost::system::system_error(error);
boost::asio::write(socket, boost::asio::buffer("Hello!n"), boost::asio::transfer_all(), ignored_error);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
std::cout.write(buf.data(), len);
}
服务器:for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (buf[len-1] == '/n')
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
std::string a(buf.data());
}
std::string message = make_daytime_string();
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer("Hi, client! I'm server!"),
boost::asio::transfer_all(), ignored_error);
}
我怕我忘记了要关闭的东西(比如插座)。但不管怎样,还有想法呢?
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (buf[len-1] == '/n')
你对tcp::ip::socket::read_some()
做了一些不正确的假设。
评论
read_some操作可能无法读取所有请求的数据字节。如果需要确保在阻塞操作之前读取请求的数据量完成。
我建议您按照文档的建议使用read()
free函数
相关文章:
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 数据库连接并将数据从C ++程序保存到MySQL
- 连接到远程存储库并获取数据
- 如何使用 TCP 连接发送大块数据
- 连接UDP套接字,但仍然接收来自其他源的数据报
- 从多个 tcp 连接读取数据
- 将文本和二进制数据连接到一个文件中
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 如何通过解析缓冲区并将数据放入正确的结构来处理传入的数据包连接?
- TCP 连接中的超时,没有数据交换
- 如何将 Matlab 与 Visual Studio 连接以进行实时数据交换?
- QNETWORK停止连接并检索数据
- 在服务器关闭的TCP连接上发送数据时的行为不一致
- 使用 Python 连接到数据流
- 是STL中的联合获取(或不连接集)数据结构
- 使用Isringstream和struct/vector在给定的数据之间建立连接
- Adafruit Fona与echo服务器建立连接,但不发送任何数据
- C++ OpenMP:将 for 循环拆分为静态偶数块,并在最后连接数据