【发布时间】:2012-03-03 07:09:00
【问题描述】:
我正在处理的服务器(这是一个 Unix C 多线程非阻塞套接字服务器)需要从客户端接收文件并将其广播给连接到服务器的所有其他客户端。
一切都在我很难确定文件何时完成传输的例外情况下工作......因为我使用非阻塞套接字我遇到了有时在文件传输期间recv返回-1(我假设是文件的结尾)然后下一次传递更多字节。
我尝试破解将“END”放在流末尾的整个内容。但是,有时当连续发送多个文件时,“END”是与下一个文件开头相同的 recv 缓冲区的一部分。或者更糟糕的是,有时我最终会得到一个以 EN 结束的缓冲区,而下一次通过 D 进入。
避免上述情况的最佳方法是什么,我真的不希望每次我从套接字循环接收一些字节时整个累积的缓冲区都检查“END”是否是它的一部分然后适当地切割...我确定有更好的解决方案吗?
提前致谢!
【问题讨论】:
-
为什么不先发送文件大小,然后再发送数据本身?