亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

用Delphi編寫點對點傳文件程序

2019-11-18 18:47:57
字體:
來源:轉載
供稿:網友
Delphi功能強大,用Delphi寫軟件,可以大大縮短軟件的開發周期。關于點對點傳文件的基本思路,就是一個服務器軟件,一個客戶端軟件,使用同一個端口,待連接上以后,客戶端給服務器發送一個請求,包括待傳的文件的文件名,大小等,如果服務器接受,就開始傳文件。當然,文件傳輸的時候可以有兩種模式,ASCII碼和Bin,不過一般通用Bin 就可以了?;谏厦娴挠懻?,本來用Delphi4的NMStrm,NMStrmServ 控件就可以完成,但是我測試過了,NMStrm控件對于較小的文件還可以使用,而且很方便,但是如果文件一大(1M)就會出錯。所以接下來我們利用Delphi中TServerSocket和TClientSocket寫這個程序由于以太包大小的限制以及DelphiSocket的處理機制(Delphi中,當你用一個Socket發送一個較大的Stream,接受方會激發多次OnRead事件,Delphi她只保證多次OnRead事件中每次數據的完整,而不會自己收集數據并返回給用戶。所以不要以為你把待傳文件在一個Socket中Send一次,另一個中Recv一次就可以了。你必須自己收集數據或自己定義協議。),所以我們采用自定義協議的方法。定義協議的規范方法是利用Record End。如:
TMyFilePRotocol=Record
sSendType=(ST_QUERY,ST_REFUSE,ST_DATA,ST_ABORT,...);
iLength:integer;
bufSend:Buffer;
End;
  我曾試過這個辦法,但失敗了,而且我一直認為我的方法是正確的,但程序一直編譯通不過,估計是Delphi有問題:) 所以我在下列的范例程序中利用另外一種辦法。Socket 類中有兩屬性ReceiveText和ReceiveBuf,在一個OnRead事件中,只能使用一次該兩屬性,所以我們可以利用一個全程變量來保存是該讀Text還是Buf,也就是說讀一次Text,再都一次Buf,這就模擬了TMyFileProtocol。

開始程序:
寫一個最簡單的,主要用于講解方法。
定義協議:
Const
MP_QUERY ='1';
MP_REFUSE ='2';
MP_ACCEPT ='3';
MP_NEXTWILLBEDATA='4';
MP_DATA ='5';
MP_ABORT ='6';
MP_OVER ='7';
MP_CHAT ='8';

協議簡介:
首先由Client發送MP_QUERY,Server接受到后發送MP_ACCEPT或MP_FEFUESE;
Client接受到MP_ACCEPT發送MP_FILEPROPERTY,Server接受到后發送MP_NEXTWILLBEDATA;
Client接受到發送MP_NEXTWILLBEDATA,Server接受到后發送MP_DATA;
Client接受到MP_DATA,發送數據,Server接受數據,并發送MP_NEXTWILLBEDATA;
循環,直到Client發送MP_OVER;
中間可以互相發送MP_CHAT+String;

Server程序:
放上以下控件:SaveDialog1,btnStartServer,
ss,(TServerSocket)

btnStartServer.OnClick(Sender:TObject);
begin
ss.Port:=2000;
ss.Open;
end;

ss.OnClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
sTemp:string;
bufRecv:Pointer;
iRecvLength:integer;
begin
if bReadText then
begin
sTemp:=Socket.ReceiveText;
case sTemp[1] of
MP_QUERY:begin
//在這里拒絕
SaveDialog1.FileName:=Copy(sTemp,2,Length(STemp));
if SaveDialog1.Execute then
begin
Socket.SendText(MP_ACCEPT);
fsRecv:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
end
else Socket.SendText(MP_REFUSE+'去死');
end;
MP_FILEPROPERTY:begin
//要發送StrToInt(Copy(sTemp,2,Length(sTemp))) 次
//時間進度顯示。。。
Socket.SendText(MP_NEXTWILLBEDATA);
end;
MP_NEXTWILLBEDATA:begin
Socket.SendText(MP_DATA);
bReadText:=false;
end;
MP_END:begin
fsRecv.Free
bReadText:=true;
end;
MP_ABORT:begin
fsRecv.Free;
bReadText:=true;
end;
MP_CHAT:begin
//Chat Msg
end;
end;{of case}
end
else begin
try
GetMem(bufRecv,2000);//2000 must >iBYTESEND
Socket.ReceiveBuf(bufRecv^,iRecvLength);
fsRecv.WriteBuffer(bufRecv^,iRecvLength);
finally
FreeMem(bufRecv,2000);
end;{of try}
bReadText:=true;
Socket.SendText(MP_NEXTWILLBEDATA);
end;
end;

Client程序:
放上以下控件:edtipAddress,OpenDialog1,btnConnect,btnSendFile,
cs. (TClientSocket)

btnConnect.OnClick(Sender:TObject);
begin
cs.Address:=edtIPAddress.Text;
cs.Port:=2000;
cs.Connect;
end;

btnSendFile.OnClick(Sender:TObject);
begin
if OpenDialog1.Execute then
Begin
cs.Socket.SendText(MP_QUERY+OpenDialog1.FileName);//FileSize???
end;
end;

cs.OnRead(Sender: TObject;Socket: TCustomWinSocket);
var
sTemp:string;
bufSend:pointer;
begin
sRecv:=Socket.ReceiveText;
Case sRecv[1] of
MP_REFUSE:ShowMessage('Faint,be refused!');
MP_ACCEPT:begin
fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpen);
//iBYTEPERSEND是個常量,每次發送包的大小。
Socket.SendText(MP_FILEPROPERTY+Trunc(fsSend.Size/iBYTEPERSEND)+1);
end;
MP_NEXTWILLBEDATA:begin
Socket.SendText(MP_NEXTWILLBEDATA);
end;
MP_DATA:begin
try
GetMem(bufSend,iBYTEPERSEND+1);
if (fsSend.Position+1+iBYTEPERSEND) < fsSend.Size then
begin
fsSend.Read(bufSend^,iBYTEPERSEND);
Socket.SendBuf(bufSend^,iBYTEPERSEND);
fsSend.Free;
end//普通的發送,大小為iBYTEPERSEND
else begin
fsSend.Read(bufSend^,fsSend.Size-fsSend.Position-1);
Socket.SendBuf(bufSend^,fsSend.Size-fsSend.Position-1);
end;//最后一次發送,發送剩余的數據
finally
FreeMem(bufSend,iBYTEPERSEND+1);
end;{of try}
end;
MP_ABORT:begin
//被取消了:(
fsSend.Free;
end;
end;{of case}
end;


整理程序:
  加入錯誤判斷,優化程序,把Server和Client聯合在一起,加入剩余時間進度顯示,做成能一次傳多個文件,加入聊天功能,就成了一個很好的點對點傳文件的程序。


上一篇:Delphi流操作技巧總結

下一篇:Delphi第三方控件全面評比介紹(玉笛書生)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
96国产粉嫩美女| 国产成人亚洲综合91| 欧美性高潮床叫视频| 一本色道久久综合狠狠躁篇的优点| 国产一区二区丝袜| 一区二区三区动漫| 欧美极品欧美精品欧美视频| 亚洲色图第一页| 国产精品稀缺呦系列在线| 亚洲国产精品电影在线观看| 国产精品视频一区二区三区四| 97久久超碰福利国产精品…| 国产国语刺激对白av不卡| 在线看欧美日韩| 在线一区二区日韩| 久久久久久久久网站| 久久综合免费视频影院| 成人亚洲综合色就1024| 欧美日韩另类字幕中文| 高清一区二区三区日本久| 日韩av成人在线观看| 国产丝袜一区视频在线观看| 亚洲大胆人体视频| 久久视频在线视频| 久久精品人人做人人爽| 一区三区二区视频| 亚洲sss综合天堂久久| 亚洲精品国产福利| 日韩中文字幕网址| 九色精品美女在线| 国产suv精品一区二区三区88区| 欧美第一黄色网| 欧美久久精品一级黑人c片| 国产精品成人一区二区三区吃奶| 人人爽久久涩噜噜噜网站| 九九热精品视频国产| 日韩精品免费视频| 亚洲激情久久久| 国产精品自产拍在线观看中文| 国产精品av在线| 亚洲欧美视频在线| 国产中文字幕亚洲| 亚洲成人a级网| 精品美女国产在线| 性欧美在线看片a免费观看| 在线日韩av观看| 日韩视频在线免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品视频自拍| 欧美激情一区二区三区久久久| 欧美日韩国产999| 久久精品成人动漫| 欧美日韩国产成人在线观看| 国产精品色视频| 国产日韩欧美电影在线观看| 亚洲精品欧美日韩专区| 中文字幕不卡av| 色婷婷av一区二区三区在线观看| 亚洲视频国产视频| 国产成人精品av| 一本一本久久a久久精品综合小说| 97在线日本国产| 亚洲欧美日韩天堂| 国产精品成人v| 欧美老肥婆性猛交视频| 欧美裸体xxxx极品少妇软件| 欧美性猛交xxxx免费看漫画| 高跟丝袜欧美一区| 日韩中文在线中文网在线观看| 亚洲一区999| 久久国产加勒比精品无码| 欧美裸体男粗大视频在线观看| 中文字幕欧美日韩精品| 91成人免费观看网站| 欧美大片在线免费观看| 国产精品99导航| 国产亚洲人成网站在线观看| 国产va免费精品高清在线| 国产精品亚洲аv天堂网| 国产精品久久久久久久一区探花| 亚洲国产一区自拍| 5278欧美一区二区三区| 色综合天天狠天天透天天伊人| 欧美激情精品久久久久久黑人| 亚洲三级av在线| 亚洲aⅴ日韩av电影在线观看| 色在人av网站天堂精品| 国产98色在线| 亚洲一区二区久久| 久久中文字幕一区| 日韩69视频在线观看| 黄色成人在线免费| 欧美性理论片在线观看片免费| 青草青草久热精品视频在线观看| 一区二区三区日韩在线| 成人黄色大片在线免费观看| 亚洲欧美一区二区三区久久| 久久久999精品视频| 亚洲综合中文字幕在线| 国内精品久久久久伊人av| 最近中文字幕2019免费| 欧美黄色片在线观看| 国产精品专区第二| 中文字幕在线看视频国产欧美| 国产一区二区三区丝袜| www国产精品视频| 久久亚洲精品视频| 97久久精品在线| 日韩av电影手机在线| 18一19gay欧美视频网站| 91免费福利视频| 久久影院免费观看| 三级精品视频久久久久| 国产一区二区三区直播精品电影| 日韩中文第一页| 久久在精品线影院精品国产| 日韩精品免费看| 欧美丝袜一区二区三区| 国产亚洲成精品久久| 亚洲精品综合久久中文字幕| 亚洲欧美日韩国产中文专区| 亚洲偷欧美偷国内偷| 成人久久18免费网站图片| 亚洲丁香久久久| 92福利视频午夜1000合集在线观看| 97视频在线观看免费| 国产精品视频精品视频| 欧美激情videos| 深夜福利国产精品| 美女福利视频一区| 精品亚洲一区二区三区在线观看| 亚洲精品久久视频| 国产精品美女免费视频| 国产精品老牛影院在线观看| 久久亚洲影音av资源网| 北条麻妃一区二区在线观看| 亚洲黄色www网站| 欧美日韩高清区| 欧美日韩综合视频网址| 日韩欧美在线播放| 日韩在线观看电影| 欧美高清视频在线观看| 中文日韩在线观看| 日韩av电影手机在线观看| 久久精品亚洲精品| 亚洲欧美国内爽妇网| 亚洲欧美日韩精品久久亚洲区| 欧美刺激性大交免费视频| 欧美韩国理论所午夜片917电影| 国产网站欧美日韩免费精品在线观看| 亚洲欧洲一区二区三区在线观看| 欧美激情videoshd| 精品久久中文字幕| 国产成人精品在线播放| 亚洲成人av片在线观看| 久久精品一区中文字幕| 国产激情综合五月久久| 欧美富婆性猛交| 精品在线小视频| 欧美成人一二三| 日韩欧美在线第一页| 日韩女在线观看| zzjj国产精品一区二区| 欧美激情中文网|