boost::asio程序中的刷新缓冲区

flush buffer in a boost::asio program

本文关键字:刷新 缓冲区 程序 asio boost      更新时间:2023-10-16

基本上我正在使用boost套接字库编写一个简单的程序…我有两个程序一个客户端和一个服务器。服务器等待来自客户端的连接,当客户端找到连接时,客户端向服务器发送消息,服务器打印出来,这在客户端第一次查询服务器时有效,但过了一会儿,一个奇怪的模式开始了,假设我们的服务器正在运行,我使用了客户端程序两次,执行:

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

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

我不知道为什么会发生这种情况,但我知道它一定是服务器,因为客户端每个单独发送一个数据包,服务器只是打印出来…我认为这与套接字缓冲区未被刷新或其他性质有关…

无论如何,这里是源代码:client.cpp
http://pastebin.com/hWpLNqnW

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

服务器中的read_some调用返回读取的字节数。您应该使用该值并使用它来null终止缓冲区。下面的内容:

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

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