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

首頁 > 編程 > Delphi > 正文

用Delphi編寫點對點傳文件程序(1)

2019-11-18 18:45:16
字體:
來源:轉載
供稿:網友
文章摘要:
 Delphi功能強大,用Delphi寫軟件,可以大大縮短軟件的開發周期。本文介紹怎樣用Delphi編寫點對點傳文件程序。  

--------------------------------------------

  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???

上一篇:用Delphi編寫點對點傳文件程序(2)

下一篇:沉默的異常--Delphi幫助尋寶之一

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

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品99久久久久久www| 国产欧美日韩亚洲精品| 国产精品欧美在线| 91日本在线观看| 国产一区二区三区在线| 欧日韩不卡在线视频| 136fldh精品导航福利| 欧美国产在线视频| 精品偷拍一区二区三区在线看| 伊人亚洲福利一区二区三区| 一本色道久久88精品综合| 中文字幕亚洲一区在线观看| 日韩av理论片| 欧美黑人xxxx| 欧美日韩亚洲精品一区二区三区| 亚洲欧洲xxxx| 国产主播精品在线| 国产亚洲欧洲高清一区| 欧美成人免费播放| 国产亚洲人成网站在线观看| 亚洲欧美激情四射在线日| 成人观看高清在线观看免费| 伊人久久男人天堂| 91香蕉亚洲精品| 九九热视频这里只有精品| 国产精品99蜜臀久久不卡二区| 日韩av在线免费观看一区| 亚洲成色www8888| 中文字幕亚洲欧美日韩在线不卡| 成人淫片在线看| 色妞色视频一区二区三区四区| 亚洲人成电影在线观看天堂色| 国产免费一区二区三区在线能观看| 国产69精品99久久久久久宅男| 国产精品视频一区国模私拍| 午夜精品在线视频| 国产一区二区三区免费视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品国产精品国自产观看浪潮| 日韩美女av在线免费观看| 国产精品成人va在线观看| 国产成人啪精品视频免费网| 51午夜精品视频| 日韩欧美精品在线观看| 欧美巨乳在线观看| 欧美放荡办公室videos4k| 在线精品高清中文字幕| 亚洲老板91色精品久久| 久久综合久久88| 97婷婷涩涩精品一区| 77777少妇光屁股久久一区| 91精品国产免费久久久久久| 亚洲毛片一区二区| 日韩av电影手机在线| 国产精品电影在线观看| 欧美国产精品日韩| 国产一区红桃视频| 日韩欧美国产黄色| 欧美性xxxxx极品| 在线成人激情黄色| 久久成人18免费网站| 色噜噜狠狠狠综合曰曰曰88av| 日韩电影在线观看永久视频免费网站| 亚洲成人网在线| 一区二区三区国产在线观看| 久久天天躁狠狠躁夜夜躁| 日本亚洲欧洲色α| 在线日韩av观看| 97香蕉超级碰碰久久免费软件| 久久99视频免费| 亚洲欧美日韩中文在线| 欧美日韩国产一区二区三区| 日韩成人在线视频网站| 成人精品aaaa网站| 欧美激情免费观看| 91精品91久久久久久| 亚洲aⅴ男人的天堂在线观看| 日韩视频免费观看| 国产精品久久久久av免费| 亚洲自拍av在线| 成人av色在线观看| 色琪琪综合男人的天堂aⅴ视频| 国产精品1区2区在线观看| 日韩国产欧美精品一区二区三区| 夜夜躁日日躁狠狠久久88av| 久久亚洲综合国产精品99麻豆精品福利| 国内精品久久久久影院优| 久久伊人91精品综合网站| 亚洲精品福利视频| 国产精品ⅴa在线观看h| 欧美香蕉大胸在线视频观看| 国产成人欧美在线观看| 中文字幕欧美视频在线| 高跟丝袜一区二区三区| 欧美电影免费观看| 欧美裸体男粗大视频在线观看| xvideos亚洲人网站| 欧美日韩成人免费| 欧美国产日韩在线| 欧美另类精品xxxx孕妇| 成人免费直播live| 最近的2019中文字幕免费一页| 国产福利视频一区二区| 68精品久久久久久欧美| 在线观看视频亚洲| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩在线一区| 成人免费网视频| 久久精品视频网站| 九九热精品视频国产| 日本欧美国产在线| 国产精品视频99| 国产成人福利视频| 国产午夜一区二区| 精品国内产的精品视频在线观看| 亚洲第一网站免费视频| 亚洲毛茸茸少妇高潮呻吟| 久99久在线视频| 国产精品igao视频| 欧美精品电影免费在线观看| 亚洲精品资源美女情侣酒店| 日韩精品中文在线观看| 国产亚洲aⅴaaaaaa毛片| 国产精品成熟老女人| 91人人爽人人爽人人精88v| 国产成人黄色av| 欧美日韩电影在线观看| 夜夜嗨av一区二区三区四区| 欧美最顶级的aⅴ艳星| 欧美激情视频在线免费观看 欧美视频免费一| 欧美精品一本久久男人的天堂| 亚洲国语精品自产拍在线观看| 欧美激情久久久久| 久久精品亚洲精品| 久久免费视频观看| 欧美日韩在线第一页| 在线免费看av不卡| 亚洲国产日韩一区| 国产一区二区三区日韩欧美| 66m—66摸成人免费视频| 91亚洲精华国产精华| 精品国产一区二区在线| 国产精品青草久久久久福利99| 国产精品日本精品| 国产精品久久一区| 欧美精品电影在线| 色综合91久久精品中文字幕| 亚洲黄色av女优在线观看| 91美女片黄在线观看游戏| 欧美日韩成人网| 揄拍成人国产精品视频| 欧美人交a欧美精品| 亚洲激情小视频| 亚洲黄色成人网| 国产精品一区二区三区成人| 成人黄色免费在线观看| 亚洲人成电影网站色| 亚洲精品wwww| 久久免费在线观看| 欧美乱人伦中文字幕在线| 欧美肥婆姓交大片| 久久久久久噜噜噜久久久精品| 日韩免费中文字幕| 欧美成aaa人片免费看|