变量中的字符串在通过套接字发送之前发生更改

string in variable changes before sending through socket

本文关键字:套接字 字符串 变量      更新时间:2023-10-16

我有以下场景,一个双套接字连接(一个充当服务器,另一个充当到客户端的连接)。

我在服务器套接字上收到一个命令,根据该命令,我正在构建一个字符串,并通过另一个套接字发送给客户端。

如果命令到达的速度不太快,这会很好地工作,但如果我在短时间内多次收到命令"test123",总是会发生下一条要发送的消息的一部分已经保存到我正在构建的字符串中。

我正在以这种方式对我可以接收的命令进行排序:

if (command == "test123"){
                command_send = "asdf123";
                buf = string_a + "," + command_send + "," + string_b + "n";
        }
else if (command == "123test"){
                command_send = "123asdf";
                buf = string_a + "," + command_send + "," + string_b + "n";
        }

等等,还有其他一些。。。。

然后我将字符串转换为字符*:

const char *msg_s = buf.c_str();

发送消息:

bytes_sent_s = send(socketfd_s, msg_s, len_s, 0)

在命令test123被发送10次的情况下,我的buf包含第一个命令的一部分,并且在命令的中间包含一部分,该部分之后应该被发送。然后我要发送的字符串看起来像"stringa,asdf123,asdf,stringb"或类似的东西。

我做错了什么?

问题不在于发送部分,而在于接收部分。我现在正在检查收到的字符串,直到出现新行,现在它工作了。

我还使用boost实现了异步通信。