变量中的字符串在通过套接字发送之前发生变化
string in variable changes before sending through socket
我有以下场景,两个套接字连接(一个充当服务器,另一个充当客户端连接)。
我在服务器套接字上收到一条命令,根据该命令,我正在构建一个字符串,然后通过另一个套接字发送给客户端。
如果命令不是太快到达,这会很好用,但如果我在短时间内多次收到命令 "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";
}
等等,还有一些其他的……
然后我将字符串转换为 char *:
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 实现了异步通信。
我有以下场景,两个套接字连接(一个充当服务器,另一个充当客户端连接)。
我在服务器套接字上收到一条命令,根据该命令,我正在构建一个字符串,然后通过另一个套接字发送给客户端。
如果命令不是太快到达,这会很好用,但如果我在短时间内多次收到命令 "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";
}
等等,还有一些其他的……
然后我将字符串转换为 char *:
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 实现了异步通信。