国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

Delphi4的Winsocket編程

2019-11-18 18:49:12
字體:
供稿:網(wǎng)友
也許你曾經(jīng)嘆服過微軟公司的IE瀏覽器等網(wǎng)絡(luò)應(yīng)用軟件功能之強(qiáng)大,技術(shù)之先進(jìn),也許你目前還沒有能力開發(fā)這樣的一個復(fù)雜的大型系統(tǒng),不過不用著急,這里可以給你一個練習(xí)的機(jī)會,就是學(xué)會用Delphi的Winsocket來編寫基于TCP/ip的應(yīng)用程序,這里假設(shè)你已經(jīng)對Delphi開發(fā)工具已經(jīng)初步熟悉了。

  我們可以想象,如果從最原始開始來編寫一段實(shí)現(xiàn)與遠(yuǎn)程計(jì)算機(jī)通信的程序,則必須對相關(guān)的網(wǎng)絡(luò)協(xié)議、系統(tǒng)的底層知識以及網(wǎng)絡(luò)軟硬件技術(shù)有一個全面的熟悉和掌握,然而這在短時間內(nèi)對大多數(shù)人來講,都不是一件容易的事。

  幸運(yùn)的是Delphi的網(wǎng)絡(luò)組件庫中為我們提供了關(guān)于實(shí)現(xiàn)網(wǎng)絡(luò)通信的組件,它們封裝了復(fù)雜的具體實(shí)現(xiàn)的細(xì)節(jié)。其中ClientSocket和ServerSocket組件使我們能夠很方便地編寫出自己的網(wǎng)絡(luò)通信和資源共享程序。

  Delphi 4.0中編寫Winsocket程序的步驟分為:

  1)Winsocket組件屬性設(shè)置;

  2)建立與遠(yuǎn)程計(jì)算機(jī)的連接;

  3)計(jì)算機(jī)間的數(shù)據(jù)傳輸;

  下面具體就這三個步驟做詳細(xì)說明。

  一.Winsocket屬性的設(shè)置

  Delphi 4.0中將Winsocket細(xì)分為兩種組件:ClientSocket和ServerSocket。它們分別作為客戶端和服務(wù)器端的組件。即在客戶端程序中采用ClientSocket組件,而在服務(wù)器端則采用ServerSocket組件。通過這兩種組件之間的通信,再加上輔助的應(yīng)用程序代碼,就可以實(shí)現(xiàn)一個簡單的通信程序。當(dāng)然在客戶端程序中再引入ServerSocket的話,那么客戶端程序就可以充當(dāng)服務(wù)器了,可以對其他的客戶端程序的請求進(jìn)行響應(yīng)。

  如果正在編寫服務(wù)器端程序,就必須設(shè)置ServerSocket組件的Port屬性。之所以要設(shè)置此參數(shù),是因?yàn)樵谕慌_計(jì)算機(jī)上可能運(yùn)行著多個服務(wù)器程序,而它們可能總在不停地接受來自于遠(yuǎn)程客戶端程序的連接請求。如果你正試圖發(fā)送一份電子郵件,而系統(tǒng)卻將你的請求連接到了另外一個服務(wù)器程序上了,則你的郵件就肯定無法正常發(fā)送出去了。所以必須給服務(wù)器程序上的ServerSocket組件設(shè)置一個合適的端口號Port。也可以設(shè)置Service屬性,它指示了ServerSocket所提供的服務(wù)類型,比如:FTP、HTTP等等。然后設(shè)置Active屬性為True。

  如果正在編寫客戶端程序,則設(shè)置ClientServer組件的屬性就多一些。Port屬性應(yīng)設(shè)置成和服務(wù)器端的Port屬性值一致。另外Host的屬性必須正確設(shè)置,它是一個只讀屬性,在設(shè)計(jì)時不可用。它指示了客戶程序所要連接的遠(yuǎn)程服務(wù)器的主機(jī)名。也可以設(shè)置Address屬性,也就是遠(yuǎn)程主機(jī)的IP地址。如果這兩個屬性都設(shè)置了的話,那么系統(tǒng)將采用Host屬性,而Address屬性設(shè)置的IP地址就變成無效了。

  二.建立與遠(yuǎn)程計(jì)算機(jī)的連接

  要在遠(yuǎn)程計(jì)算機(jī)系統(tǒng)之間進(jìn)行數(shù)據(jù)傳輸,首先必須在通信的兩臺主機(jī)之間建立連接。

  服務(wù)器端的ServerSocket組件調(diào)用Open方法初始化Socket連接,同時也就設(shè)置了Active屬性為True,將ServerSocket組件設(shè)置成偵聽模式,隨時偵測是否有連接請求。

  如果服務(wù)器接受了客戶程序的連接請求,則觸發(fā)OnAccept事件,如下代碼就是處理接受連接后服務(wù)器程序所要做的工作。

  PRocedure Myform..ServerSocketAccept(Sender: TObject,Socket: TCustomWinSocket);

  begin

  IsServer := True;

  end;

  在客戶端程序中,ClientSocket組件則設(shè)置Port、Host等必須的屬性,然后設(shè)置Active屬性為True,提出連接請求。

  三.計(jì)算機(jī)之間的數(shù)據(jù)傳輸

  一旦服務(wù)器端接受了客戶機(jī)方面的連接請求,客戶機(jī)就可以發(fā)送數(shù)據(jù)。這時,在客戶機(jī)和服務(wù)器之間就擁有了一個Socket,通過此Socket雙方實(shí)現(xiàn)通信。所以Socket屬性很重要,它又擁有很多的方法,用其中的幾個簡單的方法,就可以實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收。

  客戶機(jī)端用如下形式:ClientSocket1.socket.sendtext('string you want to send');

  在服務(wù)器端采用如下形式:ServerSocket1.socket.recievetext( str: string);此函數(shù)返回接受到的字符串的長度,將字符串存儲在變量str中。

  上述是數(shù)據(jù)傳輸?shù)淖詈唵蔚睦樱氵€可以采用Socket屬性所提供的其他方法來實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)傳輸。

  雖然Delphi 4.0中使用Winsocket組件十分方便,但是要真正熟練運(yùn)用它來實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序的開發(fā),則必須仔細(xì)閱讀關(guān)于它的幫助文件和示例程序。在不斷的學(xué)習(xí)中比較這種方法的優(yōu)點(diǎn),掌握其編程特點(diǎn),進(jìn)而掌握Delphi中所提供的其它網(wǎng)絡(luò)組件,例如:NMPOP3、NMUDP、NMFTP等的編程技巧。到那時,你就會有能力參與真正意義上的網(wǎng)絡(luò)應(yīng)用程序的開發(fā),而不是停留在拿來別人的網(wǎng)絡(luò)應(yīng)用軟件,設(shè)置一番、會熟練操作的水平上。

上一篇:用Delphi編寫CGI程序(一)

下一篇:在DELPHI程序中使用ADO對象存取ODBC數(shù)據(jù)庫

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 攀枝花市| 石门县| 北京市| 纳雍县| 轮台县| 辉南县| 垫江县| 浙江省| 常宁市| 庄浪县| 新河县| 达日县| 侯马市| 京山县| 大关县| 英超| 阿坝| 安义县| 潜山县| 牡丹江市| 昌图县| 文化| 鄂州市| 白银市| 盖州市| 平果县| 长春市| 磐石市| 明光市| 杭锦后旗| 靖安县| 东安县| 醴陵市| 临湘市| 关岭| 南城县| 大足县| 沅陵县| 永仁县| 邹城市| 赫章县|