关于文件的传输!(50分)

  • 主题发起人 主题发起人 janter
  • 开始时间 开始时间
J

janter

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用ServerSocket 和 ClientSocket编程进行点对点的文件传输?采用的是nonblocking模式.有现成的原代码就更好了.
 
我想是不是可以用SendStream发送文件...我没做过,只是想象可以...
发送端把文件作为流输入,接受端作为流输出...
如果是记录文件还可以每次发一条纪录,直到发完为止.....
 
在fastNet中提供NmStrmserv, NmStrm
NmStrm
MyFStream := TFileStream.Create(FileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
NmStrmServ Msg事件
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyFStream: TFileStream;
begin
If FileExists('./tmp.bmp') then DeleteFile('./tmp.bmp');
MyFStream := TFileStream.Create('./tmp.bmp', fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
end;
end;
详细请参考delphi Demos/fastnet/strm
 
差不多同Kent所说,不过这只是原理,在实际操作中还要编写缓冲程序等。
也就是普通的较小的文件可以一次性读入并SaveToStream,然后通过Socket
的SendStream方法传送到客户端,这很简单;不过对于超大型文件,比如
100兆的文件,就要自己编写组帧打包程序了,也就是服务器端将要传输的
文件按照一定的缓冲读入到内存,然后加上自己定义的结束符号组成一个发送
包,然后写到Stream中,同样用Socket的SendStream发送到前端,客户端按照
规定的结束符号取得一个一个的数据包,然后<font color=red>存盘</font>,
清除接收缓冲内存,再接收下一个包,最后组成完整的文件。
 
我需要传送的是任意的文件,小弟刚接触socket编程,一些细节不是很清楚.
有现成的原代码吗?谢谢!
 
必须得一步一步传输,比如先传送 n 个 byte, 那就先传一个
长度 n, 再传 n 个字节。
 
多人接受答案了。
 
后退
顶部