【发布时间】:2017-02-15 20:06:45
【问题描述】:
我有一个客户端服务器程序,在该程序中,我通过 TCP 以块的形式将文件从服务器读取到客户端。但是,并非所有发送的块都是我给出的大小。其中一些小于请求的大小甚至 1。
这是我的服务器端代码,用于读取文件并写入套接字
rd=read(filed, buffer,128);write(socketd,buffer,128);
这仅适用于非文本文件。在使用 txt 文件时,它可以完美运行,但无法用于 pdf、ppts、图像。有没有办法分块读取这些非文本文件?
在每次迭代中读取的 pdf 文件大小示例(以字节为单位) 128 128 128 128 116 128 128 36
【问题讨论】:
-
TCP 没有消息边界。如果您需要构造消息,则必须在数据中执行此操作,而不是依赖
read()返回与write()发送的相同大小。 -
为什么它返回小于请求的大小是一个问题?只需将返回的内容复制到文件中,然后返回循环。
-
我的
read用于读取文件内容,write写入套接字
标签: c file unix tcp client-server