【问题标题】:Periodically sending data over sockets in C在 C 中通过套接字定期发送数据
【发布时间】:2018-08-19 02:53:50
【问题描述】:

我已经制作了一个多客户端服务器,它使用 select() 来确定客户端当前正在发送什么。但是,我想发送大于我的缓冲区大小的数据(例如文件中的文本),同时保持非阻塞客户端。

起初我找到了将发送/接收放入while循环以发送数据的解决方案,while循环条件是发送的字节数,但这不会阻塞服务器一段时间吗?尤其是文件内容很大的时候?

我想在我的服务器 while 循环的一次迭代中发送 1024 字节,然后在下一次迭代中将下一个 1024 字节发送到客户端等。尽管这会对客户端产生影响。客户端可能会向服务器请求每个查询的下一个 x 个字节?

请让我知道是否有解决此问题的标准方法。谢谢。

【问题讨论】:

  • 基本上,您必须编写自己的状态机才能在所有客户端的交错通信/完成中正确实现文件传输或其他协议。

标签: c sockets


【解决方案1】:

你不需要为此做任何特别的事情。您的套接字可能已经配置为非阻塞,因此当您写入它们时,传递尽可能多的数据,并检查返回值以查看实际发送了多少。然后将其余数据保存在缓冲区中,并等待文件描述符再次准备好再尝试写入更多数据。

【讨论】:

  • 好吧,'将其余数据保存在缓冲区中'是的,每个套接字 fd 一个缓冲区,每个套接字 fd 一个缓冲区索引,每个套接字 fd 一个文件 fd。这并不像“您不需要为此做任何特别的事情”所暗示的那样微不足道:(
  • @MartinJames:缓冲与支持客户端尚未准备好接收第一个字节的情况相同。
猜你喜欢
  • 1970-01-01
  • 2018-05-23
  • 2018-07-15
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2012-12-18
  • 2021-01-31
  • 2016-04-06
相关资源
最近更新 更多