c - Сan 我通过套接字收到文件后立即退出 С

标签 c sockets tcp tcpclient io-socket

我正在尝试从套接字读取文件。
我使用 select with timeout 在阅读后退出。

select(maxfdp1, &rset, NULL, NULL, &timeout);

但是,如果我立即知道要发送的文件的大小,我可以在获得正确数量的字节后立即退出。

Сan我在传输之前获得完整的文件大小吗?

或者我应该使用什么在传输完成后立即退出?

最佳答案

因为 TCP 是面向流的协议(protocol),所以它没有应用层消息大小的概念。如果您在 TCP 之上设置自己的应用层协议(protocol),您可以让发送方首先传输以下数据的大小,例如网络顺序中的四个字节(大端序)。

收到所需的所有数据后,您可以调用 close socket 上。

关于c - Сan 我通过套接字收到文件后立即退出 С,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61897835/

相关文章:

c - valgrind - 地址是分配大小为 16 的 block 之前的 8 个字节

java - BufferedWriter 不刷新

c - 内核在将状态设置为 TCP_SYN_RECV 后如何继续进行三次握手

java - 通过 tcp/ip 的 jdbc 比在本地机器上慢得多

c - 如何正确原型(prototype)化 C 函数

c++ - 内存分配和字符数组

c - 使用 pthread 时 Accept() 返回对 stdout (1) 的引用

ios - SSL Socket 连接 iOS

go - 绑定(bind): The requested address is not valid in its context

python - 使用 Ctypes (SpecialKEval) 将 C++ 代码嵌入到 Python 中