我想知道您是否需要设置服务器和客户端套接字,以便它们始终可用
send recv send recv ...
因为我在发送消息时遇到问题,然后初始send()收到了两次。
我发送了消息upload foo.c
服务器显示:Message received: upload foo.c
但是随后服务器打印实际的文件内容,该文件内容应该已经传递给另一个recv()
套接字调用(因为只有while循环中的第一个套接字才打印了它的内容)
Message received: This is some text from
the file foo.c
text hello ending
所以我感觉到它正在“溢出”到下一个recv迭代中。
答案 0 :(得分:0)
我猜您正在使用TCP?然后,您必须记住TCP是 streaming 协议,没有消息边界,也没有任何开始或结束(建立和关闭的连接除外)。
单个recv
呼叫可能比单个send
呼叫发送的收益少或更多。
您需要提出一个更高级别的协议,该协议明确地包含了消息边界,例如,通过发送要接收的数据长度。然后,您必须使用循环来接收正确数量的字节。