D
dingsheng_ok
Unregistered / Unconfirmed
GUEST, unregistred user!
我做了个局域网传输程序,客户端可以将文件传输至服务器,也可以将服务器上的文件下载到本地机,我采用的是SOCKET技术,上传文件和下载文件原理都一样,将待传压缩文件转换成二进制文件,逐个分块进行传输。当客户机和服务器都在同一机上时,测试传输和下载均成功。若客户机和服务器不再同一台机上时,客户机可以将文件传输到服务器成功,但是从服务器下载ZIP文件到客户机上时,打开ZIP文件出错:不可预料的ZIP格式档案文件末端或者提示多卷或错误的ZIP格式档案文件。我就不明白,为什么客户机和服务器在同一台机上下载的ZIP文件可以打开,而不在同一台机上时打开ZIP文件出错,而且下载后的文件大小是一样的,没有少下载一个字节啊。部分代码
服务端下载:
a.Position:=0;
nsize:=a.size; //a是待下载的文件名
repeat //循环发送数据块
if nsize>4096 then
nsize:=4096;
a.ReadBuffer(buffer^,nsize); //读数据到缓冲区
strm.Write(buffer^,nsize); //发送
nsize:=a.Size-a.Position;
until (nsize=0);
form1.Memo1.Lines.Add(timetostr(now)+'发送完毕');
freemem(buffer);
客户端接收:
fs:=tfilestream.Create(form1.Label3.Caption+'/'+form1.treeview1.selected.text+'.zip',fmcreate);//创建文件流
repeat
n:=nsize-fs.Position;
if (n>4096)
then n:=4096;
n:=strm.Read(buffer^,n);
fs.WriteBuffer(buffer^,n);
until (fs.Position=nsize);
服务端下载:
a.Position:=0;
nsize:=a.size; //a是待下载的文件名
repeat //循环发送数据块
if nsize>4096 then
nsize:=4096;
a.ReadBuffer(buffer^,nsize); //读数据到缓冲区
strm.Write(buffer^,nsize); //发送
nsize:=a.Size-a.Position;
until (nsize=0);
form1.Memo1.Lines.Add(timetostr(now)+'发送完毕');
freemem(buffer);
客户端接收:
fs:=tfilestream.Create(form1.Label3.Caption+'/'+form1.treeview1.selected.text+'.zip',fmcreate);//创建文件流
repeat
n:=nsize-fs.Position;
if (n>4096)
then n:=4096;
n:=strm.Read(buffer^,n);
fs.WriteBuffer(buffer^,n);
until (fs.Position=nsize);