基本上我正在使用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
read_some服务器中的调用返回读取的字节数.您应该使用该值并使用它来终止缓冲区.这些方面的东西:
int len = connection.read_some(boost::asio::buffer(buf), error);
buf[len] = '\0';
Run Code Online (Sandbox Code Playgroud)
在第一条消息中,缓冲区可能已使用零初始化.但是,下一次,它将包含与上一次迭代相同的内容.请注意,strcpy(buf,"");调用只会将第一个字节设置buf为零.
| 归档时间: |
|
| 查看次数: |
4071 次 |
| 最近记录: |