boost::asio程序中的刷新缓冲区
flush buffer in a boost::asio program
基本上我正在使用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
的第一个字节设置为零。
相关文章:
- C++字符*缓冲区的大小
- 如何让 cout 缓冲区在 ubuntu 上刷新
- 缓冲区刷新究竟是如何工作的(std::endl 和 之间的区别)?
- 换行符是否也会刷新缓冲区?
- 输出缓冲区无法刷新的情况?
- 如何刷新或清除 GetAsyncKeyState 的缓冲区
- 何时刷新输出缓冲区
- C++ 刷新缓冲区
- 如何在获得下一个字符后正确刷新输入缓冲区,而无需按两次回车键!C++
- 如何在使用FFmpeg写入mp4文件时将缓冲区数据刷新到磁盘
- 缓冲区刷新:"n" vs. 标准::endl
- 使编译器不自动刷新缓冲区
- 可以在程序退出时和请求输入时自动刷新自定义流缓冲区
- 我可以通过控制std::ofstream中的缓冲区刷新来获得性能吗
- boost::asio程序中的刷新缓冲区
- 将fseek函数在c++中刷新缓冲区中的数据
- 如何在不刷新缓冲区的情况下打印换行符
- 为什么我们刷新流而不是缓冲区
- 缓冲区何时刷新
- Linux c写入后刷新串行缓冲区