我需要对在套接字程序中使用多个发送/接收进行说明。 我的客户端程序如下所示(使用TCP SOCK_STREAM)。在套接字中发送多个发送/接收
send(sockfd,"Messgfromlient",15,0);
send(sockfd,"cli1",5,0);
send(sockfd,"cli2",5,0);
send(sockfd,"cli3",5,0);
send(sockfd,"cli4",5,0);
send(sockfd,"cli5",5,0);
和服务器程序如下所示。
recv(newsockfd,buf,20,0);
printf("Buffer is %s\n",buf);
当我执行上述程序,则输出为如下:
客户端消息:Messgfromlient
相信BUF大小为20,因此,只有一个缓冲器得到接收。 在服务器端添加一个recv。
char buf[20],buf[20];
------skipped------
recv(newsockfd,buf,20,0);
recv(newsockfd,buf1,20,0);
printf("Client Msg :%s\n",buf);
printf("Client Msg :%s \n",buf1);
输出: 第一次试验:
Client Msg :Messgfromlient
Client Msg :cli2
第二个线索:
Client Msg :Messgfromlient
Client Msg :cli1
正如我们可以看到,有在。OUPUTS一些矛盾, 从客户端看起来一切邮件正在发送,但在服务器中,msg将基于buf大小接收,这里尽管buf1的大小为20,为什么'cli3''cli4''cli4'msgs没有在bu上收到F1?有没有特定的限制?请澄清一下。
由于事先 拉贾
send()和recv()是什么返回值?你不能忽视这一点。 –
您正在发送5个字节和15个字节的缓冲区,但在接收时,您正在打印以第一个“NUL”字节(0x00)结尾的字符串。如果你保存了'recv()'调用的返回值并打印它们,这可能会有所帮助。 – TripeHound
传递的'len'是允许的最大长度。 'recv'可以返回一个字符或者(在非阻塞系统中)a -'1'。您的“问题”属于进程调度:它取决于在上下文切换之前执行的代码点以及内核已经分离的内容。 – LPs