boost :: asio程序中的flush buffer

时间:2011-11-19 00:00:33

标签: c++ boost boost-asio

基本上我正在使用boost socket库编写一个简单的程序......我有两个程序,一个客户端和一个服务器。服务器等待来自客户端的连接,当它找到一个客户端向服务器发送消息并且服务器打印出来时,这在客户端第一次查询服务器时工作但是一段时间后奇怪的模式开始让我们说服务器是运行,我执行了两次客户端程序:

./client localhost name message
./client localhost name test

服务器的输出首先是:
name: message
然而,接下来它会显示
name: testage

我不知道为什么会这样,但我知道它必须是服务器,因为每个客户端都独立发送一个数据包,服务器只是将其打印出来...我认为这与此有关套接字缓冲区没有被刷新或者那种性质......

无论如何继承源代码: client.cpp
http://pastebin.com/hWpLNqnW

server.cpp
http://pastebin.com/Q4esYwdc

1 个答案:

答案 0 :(得分:6)

服务器中的read_some调用返回读取的字节数。您应该使用该值并使用它来终止缓冲区。这些方面的东西:

int len = connection.read_some(boost::asio::buffer(buf), error);
buf[len] = '\0';

在第一条消息中,缓冲区可能已使用零初始化。但是,下一次,它将包含与上一次迭代相同的内容。请注意,strcpy(buf,"");调用最终只会将buf的第一个字节设置为零。