gpt4 book ai didi

c++ - 在 boost::asio 程序中刷新缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:03 27 4
gpt4 key购买 nike

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

./client localhost name message
./client 本地主机名测试

服务器的输出 0f 首先是:
名称:消息
然而接下来它会显示
姓名:testage

我不知道为什么会这样,但我知道这一定是服务器的问题,因为每个客户端都独立发送一个数据包,服务器只是打印出来...我认为这与套接字缓冲区没有被刷新或类似的东西......

无论如何,这是源代码:客户端.cpp
http://pastebin.com/hWpLNqnW

服务器.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++ - 在 boost::asio 程序中刷新缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com