我制作了一个多客户端服务器,该服务器使用select()确定当前正在发送的客户端。但是,我想发送大于缓冲区大小的数据(例如,文件中的文本),同时保持无阻塞客户端。
首先,我发现了将send / recv放入while循环中以发送数据的解决方案,而while循环条件是所发送的字节数,但是这不会在一定时间内阻塞服务器吗?尤其是如果文件内容很大?
我当时正在考虑在服务器while循环的一个迭代中发送1024字节,然后在下一个迭代中将下一个1024字节发送给客户端,依此类推。尽管这会对客户端造成影响。客户端是否可能每次查询都向服务器请求下一个 x 字节?
请让我知道是否有标准方法可以解决此问题。谢谢。
答案 0 :(得分:2)
您不需要为此做任何特殊的事情。您的套接字可能已经配置为非阻塞的,因此当您对其进行写入时,请传递尽可能多的数据,并检查返回值以查看实际发送了多少。然后将其余数据保留在缓冲区中,并等待文件描述符再次准备好之后再尝试写入更多内容。