C 中的块中的 read() 和 write() 非文本文件
read() and write() non text files in chunks in C
我有一个客户端服务器程序,在该程序中,我通过 TCP 将文件从服务器分块读取到客户端。但是,并非所有发送的块都符合我给出的大小。其中一些小于请求的大小甚至 1。
这是我的服务器端代码,用于读取文件和写入套接字
rd=read(filed, buffer,128);
write(socketd,buffer,128);
这仅适用于非文本文件。在使用 txt 文件时,它可以完美地工作,但对于 pdf、ppts、图像则失败。有没有办法分块读取这些非文本文件?
在 pdf 文件的每次迭代中读取的大小样本(以字节为单位)
128
128
128
128
116
128
128
36
您应该只写入实际从文件中读取的数量。如果文件的大小不是 128 的倍数,那么最后一次读取不能 return 128 字节,它只是 return 文件中剩下的内容。使用 rd
作为写入套接字的数量。
while ((rd = read(filed, buffer, 128)) > 0) {
write(socketd, buffer, rd);
}
问题已解决。我正在使用 strlen(buffer) 来给出这些数字。根据需要,read() 返回的整数为 128。
我有一个客户端服务器程序,在该程序中,我通过 TCP 将文件从服务器分块读取到客户端。但是,并非所有发送的块都符合我给出的大小。其中一些小于请求的大小甚至 1。
这是我的服务器端代码,用于读取文件和写入套接字
rd=read(filed, buffer,128);
write(socketd,buffer,128);
这仅适用于非文本文件。在使用 txt 文件时,它可以完美地工作,但对于 pdf、ppts、图像则失败。有没有办法分块读取这些非文本文件?
在 pdf 文件的每次迭代中读取的大小样本(以字节为单位) 128 128 128 128 116 128 128 36
您应该只写入实际从文件中读取的数量。如果文件的大小不是 128 的倍数,那么最后一次读取不能 return 128 字节,它只是 return 文件中剩下的内容。使用 rd
作为写入套接字的数量。
while ((rd = read(filed, buffer, 128)) > 0) {
write(socketd, buffer, rd);
}
问题已解决。我正在使用 strlen(buffer) 来给出这些数字。根据需要,read() 返回的整数为 128。