我有一个客户端服务器程序,在其中我通过TCP以块的形式从服务器读取文件到客户端。但是,并非所有发送的块都是我给出的大小。其中一些小于要求的大小甚至1。
这是我的服务器端代码,用于从文件读取和写入套接字
rd=read(filed, buffer,128);
write(socketd,buffer,128);
仅适用于非文本文件。在使用txt文件时,它可以很好地工作,但是对于pdfs,ppts和图像都失败了。有没有办法以块的形式阅读这些非文本文件?
pdf文件的每次迭代中读取的大小(以字节为单位)的示例 128 128 128 128 116 128 128 36
答案 0 :(得分:0)
您应该只写出实际从文件中读取的金额。如果文件的大小不是128的倍数,那么最后一次读取不能返回128个字节,它只返回文件中剩下的内容。使用function getY(x) {
return new Promise( function(resolve,reject){
setTimeout( function(){
resolve( (3 * x) - 1 );
}, 100 );
} );
}
function foo(bar,baz) {
var x = bar * baz;
// return both promises
return [
Promise.resolve( x ),
getY( x )
];
}
function spread(fn) {
return Function.apply.bind( fn, null );
}
Promise.all(
foo( 10, 20 )
)
.then(
spread( function(x,y){
console.log( x, y ); // 200 599
} )
)
作为写入套接字的数量。
rd
答案 1 :(得分:0)
问题已解决。我正在使用strlen(缓冲区)来提供这些数字。根据需要,read()返回的整数为128。