C 在套接字中写入的读数小于
想象一下C语言中的TCP服务器/客户端。想象一下: 1) 在服务器中,我向套接字写入812个字节 2) 在客户端,我只读取512字节 3) 在客户端,我写任何东西 服务器发送的其他300字节会发生什么情况?它们被覆盖了吗 另外,缓冲区大小仅为512,如何读取所有812字节?我能做个循环吗?如何知道read()是否已读取服务器发送的所有内容C 在套接字中写入的读数小于,c,sockets,client,buffer,C,Sockets,Client,Buffer,想象一下C语言中的TCP服务器/客户端。想象一下: 1) 在服务器中,我向套接字写入812个字节 2) 在客户端,我只读取512字节 3) 在客户端,我写任何东西 服务器发送的其他300字节会发生什么情况?它们被覆盖了吗 另外,缓冲区大小仅为512,如何读取所有812字节?我能做个循环吗?如何知道read()是否已读取服务器发送的所有内容 谢谢 行为取决于套接字是阻塞还是非阻塞。阻塞将一直等到收到数据。 操作系统将缓冲一定数量的数据,等待您读取,一旦数据已满,服务器将阻止等待缓冲区有空间,或者返
谢谢 行为取决于套接字是阻塞还是非阻塞。阻塞将一直等到收到数据。 操作系统将缓冲一定数量的数据,等待您读取,一旦数据已满,服务器将阻止等待缓冲区有空间,或者返回-1 ewoodblock error。 发送的数据将在那里等待,直到客户端读取它。通常,在得到所需内容之前,您希望进行循环阅读 服务器发送的其他300字节会发生什么情况 它们仍然坐在客户机套接字的内部缓冲区中,等待客户机的代码读取它们 它们被覆盖了吗 没有 另外,缓冲区大小仅为512,如何读取所有812字节?我能做个循环吗 是的,这正是你必须要做的。您需要多次读取套接字,直到所有812字节都已读取。读取将告诉您每次调用它时接收的字节数 如何知道read()是否已读取服务器发送的所有内容 套接字无法知道这一点。您在套接字上实现的协议需要说明这一点。对于TCP,只有3个选项:
1) 在套接字关闭之前,套接字缓冲区中的300字节保持未读状态。它们不会被覆盖。2) 奇怪的问题。当然,在512字节的缓冲区中不能容纳812字节。您必须读取512字节,将这些字节传递给应用程序,然后返回读取剩余的字节。3) 检查文档。它返回recvd字节数,否则错误时返回-1,errno变量将提供有关原因的信息(通常没有更多数据),如果服务器已关闭套接字,则返回0。感谢帮助!你介意检查我自己的答案吗?这对我帮助很大!非常感谢。