第一题300分,第二题200分,第三题酌情给分(200分)

  • 主题发起人 主题发起人 WebBar
  • 开始时间 开始时间
lvxq 的办法也太 ...

我的聊天室基本功能已完成了,基本上和 mIRC 兼容,只是还没做 DCC,所以才问这个
问题的
 
WebBar:你聊天室有服务器端吗?
 
做过一个,支持大小窗聊天,兼容 mirc
没完成,我打算先把客户端做做好再做 Server
 
第一个问题有知道的吗?
实在不行的话,谁给我 FTP Server 的源码也行,一样给足 300 大洋
注意是 FTP Server,不是 FTP Client

第二个问题我需要源码,谁有 ? 注意我要能传几兆大文件才行
 
我这段时间正在做FTP Server的程序,如果需要的话我可以Mail给你,不过你需要ICS控
件包。
Ftp 的传送也没有问题,我昨天刚好完成了断点续传的功能,几M小意思啦。 :)
 
1。聊天器用udp协议比较好,可以减少服务器的压力,同时速度也比较快。
2。如果传文件,最好用zmodem协议,底层用tcp协议好点,免去不少校验;
决不要用udp传文件,除了包大小的问题,两个包的传输路径可能不一致,导致次序问题,
拼起来就不是一个文件,tcp就没这个问题。
3。你的问题有点怪,按理两个相同ip和端口的server,bind的时候应该报错才对,可能程序
处理了这个错误,第二个根本没有起来。
 
3:你认为是同一端口?其实不是。当软件多次启动企图使用同一端口时,不会触发异常,
而是系统自动分配了其他端口,后启动的自然无法收到了;
2:如果你使用TCP的话,建立连接后传多大都无所谓了,
如果用UDP,就有很多问题要自己处理了。
 
可恶啊,网络慢的要命,几次都打不开,

to 教父,请发到 jonix@suntec.net 和 huibo@online.sh.cn
拜托两个都发一下,能用的话马上给分
 
2.没人给程序?
用tcp或udp都可,只是用udp较tcp复杂.给出用tcp传送文件代码.

procedure TForm1.Send1_fileClick(Sender: TObject);
var ...
begin
OpenDialog1.Filter :='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*';
if OpenDialog1.Execute then
begin
sendfilename:=OpenDialog1.FileName;
SendFStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
sendleft:=SendFStream.Size;
ClientSocket1.Address:=ip;
ClientSocket1.Open;
end;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,s1: string;
buf: array [1..2048]of byte;//以2k大小为一个传送单位,大了可能出错
begin
s:=Socket.ReceiveText;//
if pos('go',s)<>0 then //开始发送
begin
if 2048<sendleft then
begin
SendFStream.ReadBuffer(buf,2048);
Socket.SendBuf(buf,2048);
sendleft:=sendleft-2048;
end
else
begin
SendFStream.ReadBuffer(buf,sendleft);
Socket.SendBuf(buf,sendleft);
SendFStream.Free;
end;
end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(***);//文件名和长度
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var s,s1: string;
buf: array [1..2048]of byte;
begin
application.ProcessMessages;
if RecevFstream=nil then
begin
s:=socket.ReceiveText;
name_file:=get_filename

recevleft:=get_filesize;

RecevFstream:=TFileStream.Create(Get_FileName,fmCreate);
Socket.SendText('go');
end
else
begin
if 2048<recevleft then
begin
ALed2.Value:=true;
Socket.ReceiveBuf(buf,2048);
RecevFstream.WriteBuffer(Buf,2048);

recevleft:=recevleft-2048;
socket.SendText('go');
end
else
begin
socket.ReceiveBuf(buf,recevleft);
RecevFstream.WriteBuffer(Buf,sizeof(buf));
RecevFstream.Free;
RecevFstream:=nil;
end;
end;
end;

 
to 教父,
好象功能还没达到我的要求,不过也算不错了
先把这里的 200 分给你

to yhhxj
请把你的 TCP 文件传送代码用 email 发给我,收到后另开题给分

请两个都发一下
huibo@online.sh.cn
jonix@suntec.net
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
720
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部