二十三章InterNet网路程式设计.ppt

上传人:小飞机 文档编号:5048178 上传时间:2023-05-31 格式:PPT 页数:89 大小:478.50KB
返回 下载 相关 举报
二十三章InterNet网路程式设计.ppt_第1页
第1页 / 共89页
二十三章InterNet网路程式设计.ppt_第2页
第2页 / 共89页
二十三章InterNet网路程式设计.ppt_第3页
第3页 / 共89页
二十三章InterNet网路程式设计.ppt_第4页
第4页 / 共89页
二十三章InterNet网路程式设计.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《二十三章InterNet网路程式设计.ppt》由会员分享,可在线阅读,更多相关《二十三章InterNet网路程式设计.ppt(89页珍藏版)》请在三一办公上搜索。

1、1,第二十三章 InterNet網路程式設計,有沒有想過自己寫個Service呢?想不想自己也寫一套發信程式呢?在這一章節裡,我們將介紹socket的觀念以及BCB在Internet上開發應用程式的方法。,2,大綱,23-1.Socket觀念 23-2.哪些VCL元件可以使用23-3.寄信程式 23-4.HTTP 抓網頁程式 23-5.一些Client端的小程式 23-6.聊天室 23-7.CGI程式設計 本章習題,3,23-1.Socket觀念,Socket是一種API,他介於網路應用程式跟通訊協定之間,他就像是一般的程式中提供的函式一樣,只不過Socket是專用於網路程式之中。所以說,So

2、cket也屬於System call,讓使用者可以在程式中直接呼叫,就好像在C/C+語言中你要輸入就需要使用scanf、cin或是輸出時會用到printf、cout等等。雖然說使用Socket就像使用一般的函式一樣簡單,但是還是必須要具備一些基本的通訊協定概念,不然什麼時候要呼叫socket()、bind()等函式就一頭霧水了,只是我們只需要了解,不需要知道怎麼寫出這些API。,4,23-1.Socket觀念,Socket最早是出現在BSD系列的Unix主機中,所以現在大家在學習Socket的過程中,最常聽到的就是Berkeley Socket。當然現在我們是在Windows上寫Socket的

3、程式,所以我們使用的Socket就被稱做Win Socket。會叫做Berkeley的原因是BSD中的B就是Berkeley。Win Socket跟Berkeley Socket有什麼不同?除了作業系統(開發環境)的不同外,其餘皆大同小異,因為大家通常都會遵循著Berkeley Socket的標準來開發整個Socket的API。,5,23-1.Socket觀念,Socket的定義網路連線的兩端之間,為了要互相聯繫以及溝通所用的介面就稱做Socket。這兩端無論是不是在LAN內都可以。在Unix下要寫網路程式真的需要對整個Socket以及通訊協定有一定的熟悉度,但是現在BCB打破了如此的迷失。B

4、CB內部提供了Server/Client Socket供Server端以及Client端使用,我們不需要自己慢慢寫程式碼來建立連線,你只要設定好Server/Client Socket的一些屬性,BCB就會幫你完成一堆瑣碎的事情。我們所要考慮的只剩下該如何設計整個網路程式的主體。,6,23-2.哪些VCL元件可以使用,在BCB6中撰寫有關網路的程式,會有許多的VCL元件可供我們使用。例如Webservices、InternetExpress、Internet、WebSnap、FastNet、Indy Clients、以及Indy Servers等等,都是發展網路相關程式的元件。在這一章裡,我們

5、主要要介紹的元件都分布在Internet和FastNet這兩個Page中,包括Client/Server Socket或是其他已經包裝好的VCL元件都可以找的到。,7,23-2.哪些VCL元件可以使用,InterNet中比較常用到的元件ClientSocketClient端的TCP Socket API。可以利用這個元件讓我們使用TCP通訊協定開發Client端的網路應用程式ServerSocketServer端的TCP Socket API。可以利用這個元件讓我們使用TCP通訊協定開發Server端的網路應用程式FastNet中比較常用到的元件NMDayTime可以傳回Server端的日期以

6、及時間NMMsg 傳送一般的文字訊息,8,23-2.哪些VCL元件可以使用,FastNet中比較常用到的元件NMMSGServ接收一般的文字訊息 NMEcho 傳送或是接收訊息,和NMMsg以及NMMSGServ有部分相似 NMFTP 設計FTP Client端的VCL元件,主要用來檔案傳輸 NMHTTP 利用HTTP通訊協定取得HTML的文件 NMNNTP 從新聞伺服器接收文章,或是傳送文章到新聞伺服器,9,23-2.哪些VCL元件可以使用,FastNet中比較常用到的元件NMStrm 傳送資料流 NMStrmServ 接收NMStrm送過來的資料流 NMPOP3 使用POP3通訊協定來接收

7、或是傳送信件 NMSMTP使用SMTP通訊協定來傳送郵件 NMTime 可以傳回Server端的時間,10,23-2.哪些VCL元件可以使用,FastNet中比較常用到的元件NMUDP 傳輸的通訊協定改用UDP Protocol NMURL 將URL編碼/解碼成一般的文字字串 NMUUProcess 使用MIME或是UU En/Decode來編碼/解碼 NMFinger 獲得Server端使用者的訊息,11,23-3.寄信程式,在這一小節我們將寫一個小小的寄信程式,讓使用者可以直接在電腦上寄出信件。這個程式可以說是相當的簡單,看起來似乎不太像是網路程式,其實最主要是因為這些底層的程式碼BCB都

8、幫我們包裝好了,所以才不需要寫太多程式碼。這個程式我們將會放在範例23-1中。,12,23-3.寄信程式,範例23-1:寄信程式的開發範例說明範例23-1主要是希望可以利用BCB強大又好用的VCL元件快速的開發出一個寄信程式出來,在這個範例中,我們主要使用了FastNet中的NMSMTP這個VCL元件來寄信。整個開發過程我們完全不需要知道任何跟網路相關的知識,我們只需要知道NMSMTP中的各個屬性該填入什麼樣的值即可!範例23-1的設計畫面 用到LabeledEdit、Memo、ListBox、BitBtn、StatusBar、NMSMTP、以及OpenDialog這七種VCL元件,13,23

9、-3.寄信程式,範例23-1:寄信程式的開發設定OpenDialog 將OpenDialog中的ofAllowMultiSelect這個屬性的值改成true,讓使用者在選擇附加檔案的時候可以多重選擇。也將Filter的值設定成All File|*,也就是預設讀取所有的檔案。,14,23-3.寄信程式,範例23-1:寄信程式的開發功能的需求選擇附加檔案預計要做到選了幾個檔案就必須要全部填入ListBox中,若是要取消則是選取ListBox的內容後按下Delete按鈕,這樣子可以方便使用這套Mail Sender來寄送附帶檔案。有關寄送信件的這段程式碼中,會先判斷是不是有些必要的值沒有被輸入,如果

10、有缺少某些值,程式會自動判斷出缺少哪些值,並要求重新輸入如果輸入的值都沒有缺少,就會馬上進入寄信的程式。在寄信的一開始我們要先Connect上Mail Server,連上了之後,我們才繼續將一些資訊寫入NMSMTP中,等這些事情都做完了,我們就可以執行Send這個函式將這封Mail利用所指定的Server寄出。,15,23-3.寄信程式,範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼,16,23-3.寄信程式,範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼,17,23-3.寄信程式,範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼,18,23-3.

11、寄信程式,範例23-1:主要程式碼(main.cpp)傳送郵件部分程式碼,19,23-3.寄信程式,範例23-1:主要程式碼(main.cpp)新增郵件附件檔部分程式碼,20,23-3.寄信程式,範例23-1:主要程式碼(main.cpp)刪除郵件附件檔部分程式碼,21,23-3.寄信程式,範例23-1:執行結果,一個簡單的寄信程式就經完成了,簡單吧!不過,不知道大家有沒有發現一些事情?如果Server突然連不上去怎麼辦?如果Server主機的位址被亂填怎麼辦?如果附加檔名不存在怎麼辦?如果。有著太多不確定的問題在這個程式中了,那我們該如何解決呢?我們將在範例23-2中告訴各位這些不確定性的問

12、題該如何解決。範例23-2主要是由範例23-1改過來的,根據範例23-1中的一些小缺點作一些改進。,22,23-3.寄信程式,範例23-2:寄信程式加強版的開發範例說明範例23-2主要是修正了範例23-1的一些缺點,包括了連線上的問題,附帶檔的問題,以及一些我們必須要自己handle的問題我們都在範例23-2中一併解決。在這個範例中最大的差別就是在多了Connect和Disconnect這兩個按鈕。為什麼要多這兩個呢?最主要是因為如果你還沒有確定可以跟Server連結上就將mail送出去,這時就會發生例外事件,如果我們在還沒Connect之前不讓使用者可以按下Send鈕就可以保證不會發生Con

13、nect Fail的例外事件發生。,23,23-3.寄信程式,範例23-2:主要程式碼(main.cpp)可以用來檢查輸入資料的方法很多,包括用例外事件的寫法或是利用一堆If來做判斷都可以,在這個範例中,我們使用最基本的If來檢查資料的正確性。在這個範例中除了用If來判斷資料的正確性外,我們還使用了BCB所提供的一些函式來判斷連線的狀況。在這份投影片中,我們只列出使用BCB函式來判斷連線的程式碼。想要了解範例完整的程式碼,請參考書上的程式碼。,24,23-3.寄信程式,範例23-2:主要程式碼(main.cpp)與Server連線部分程式碼,25,23-3.寄信程式,範例23-2:主要程式碼(

14、main.cpp)與Server連線部分程式碼,26,23-3.寄信程式,範例23-2:主要程式碼(main.cpp)與Server連線部分程式碼,27,23-3.寄信程式,範例23-2:主要程式碼(main.cpp)與Server斷線部分程式碼,28,23-3.寄信程式,範例23-2:主要程式碼(main.cpp)Connection Failed 時所呼叫的Function,29,23-3.寄信程式,範例23-2:寄信程式加強版的開發執行結果,30,23-3.寄信程式,如果各位有發現的話,在範例23-2應該會看到多了NMSMTP1ConnectionFailed這個函式,這個就是當Conn

15、ectionFailed的時候會觸發的事件程序在NMSMTP中有關各種Failed所引發的事件還有OnAttatchmentNotFound、OnAuthenticationFailed、OnConnectionFailed、OnFailure、OnHeaderIncomplete、OnInvalidHost、OnRecipienNotFound等事件這些事件的用法跟OnConnectionFailed的用法都差不多,大家可以嘗試著使用看看,一套完善的發信軟體必須要能handle住上面所列的那些Exception才不至於一天到晚出問題,也希望讀者可以透過範例29-2繼續完成還沒Implemen

16、t的這些Failed相關的Event,讓這個寄信程式可以更完美。,31,23-4.HTTP抓網頁程式,上一節我們舉了Mail Client當作一個範例,這邊我們再舉一個利用HTTP Protocol來抓取網頁資料的小程式。這個程式我們將放在範例23-3中。這個程式最主要是抓取我們所指定的網頁的資料,傳回值為這個網頁的Header以及Body。這個程式設計上相當的簡單,只用了一個NMHTTP以及兩個SaveDialog為隱藏的VCL元件,其餘的就是PageControl、Panel、Edit、Memo、以及BitBtn等基本的元件。,32,23-4.HTTP抓網頁程式,範例23-3:網頁抓取範例

17、範例說明在該範例中,我們將利用NMHTTP這個元件抓取網路上任何一個網頁的Header以及Body這兩個重要資料。底下我們將一步一步告訴讀者我們該如何完成這個範例。Step 1:開新專案,並且將該使用到的VCL元件放到Form上面 Step 2:設定相關屬性 SaveDialogNMHTTPStep 3:程式碼的撰寫,33,23-4.HTTP抓網頁程式,範例23-3:主要程式碼(main.cpp),34,23-4.HTTP抓網頁程式,範例23-3:網頁抓取範例執行結果,35,23-5.一些Client端的小程式,在這一小節我們將寫一些簡單的Client/Server程式,全部是利用FastNe

18、t內的元件所完成的。DateTime、Time、Message、Echo、NNTP、Stream、POP3、URL、MIME、UUDecode、Finger等。現在我們就利用範例23-4、23-5、23-6、23-7、23-8、23-9、23-10、23-11、以及23-12解釋各個元件的使用方法。,36,23-5.一些Client端的小程式,範例23-4:DayTime/Time範例範例說明DayTime、以及Time這兩種服務主要就是傳回目前Server上的時間以及日期。我們寫的這個程式就是去Server上要回這些資料並且顯示出來。在這個介面中,我們將DayTime以及Time兩種不同的服

19、務分開寫,這樣可以讓使用者更容易分辨這兩種VCL元件的用法。,37,23-5.一些Client端的小程式,範例23-4:主要程式碼(main.cpp),38,23-5.一些Client端的小程式,範例23-4:主要程式碼(main.cpp),39,23-5.一些Client端的小程式,範例23-4:DayTime/Time範例執行結果,40,23-5.一些Client端的小程式,範例23-5:Message Server/Client範例範例說明Message這部分的程式分成Server端以及Client端,使用6711這個Port來傳輸Message。這個程式最主要的功能就是Server端可

20、以接收來自Client端的資料。,41,23-5.一些Client端的小程式,範例23-5:主要程式碼(main.cpp)Server Side Code,42,23-5.一些Client端的小程式,範例23-5:主要程式碼(main.cpp)Client Side Code,43,23-5.一些Client端的小程式,範例23-5:Message Server/Client範例執行結果,44,23-5.一些Client端的小程式,範例23-6:Echo Client範例範例說明Echo Server主要的用途就是將Client發給Server的訊息傳送回來。在這個程式中,我們除了將訊息傳送回

21、來外,我們也加入了時間的計算,看看整個傳送過程中需要多少時間。,45,23-5.一些Client端的小程式,範例23-6:主要程式碼(main.cpp),46,23-5.一些Client端的小程式,範例23-6:主要程式碼(main.cpp),47,23-5.一些Client端的小程式,範例23-6:Echo Client範例執行結果,48,23-5.一些Client端的小程式,範例23-7:NNTP Client範例範例說明NNTP就是我們一般常說的新聞群組或是News Server。在這個程式中我們只先寫出與主機連線以及取得Group名稱,並且抓取Group文章的數量資訊。至於列出Grou

22、p內的文章的標題,還有閱讀文章、發表文章等等的功能,只需要稍微看一下NMNNTP中的各種Event所代表的意義,以及我們要執行的動作有哪些屬性,我們就可以很容易的寫出一個完整的NNTP Client端軟體(也常被稱做NNTP Reader)。至於News Server還有一些Control Message也只是一封比較特別的文章而已,所以要發表所謂的Control Message我們只需要稍微改一下發表文章這一部份就可以達到所要的功能。,49,23-5.一些Client端的小程式,範例23-7:主要程式碼(main.cpp),50,23-5.一些Client端的小程式,範例23-7:主要程式碼

23、(main.cpp),51,23-5.一些Client端的小程式,範例23-7:主要程式碼(main.cpp),52,23-5.一些Client端的小程式,範例23-7:NNTP Client範例執行結果,53,23-5.一些Client端的小程式,範例23-8:Stream Server/Client範例範例說明Stream Server/Client到底要做什麼?照字面上來看,Stream就是資料流的意思。如果要跟Message Client/Server比較的話,Message Client/Server是傳送純文字的資料給Server端而Stream Client/Server則是傳送

24、binary資料給Server端。在這個程式中我們使用6712這個Port來傳送接收資料,傳送的資料為影像檔(Bitmap File)。主要介面分成Client以及Server兩個部分,Client端只有單純的選擇檔案(BMP檔案)並且送出Server端則是將接受到的資料存成buf.bmp,如果我們按下Server端的Load,程式則會將Server都到資料存下來的這個檔案放到Timage上讓大家觀看。不管在Client端或是Server端,我們都必須得開一個FileStream這個物件出來當作資料流的暫存區,這跟我們一般開檔的觀念很像,只是在這邊我們將整個二元檔看成是一個Stream。,54

25、,23-5.一些Client端的小程式,範例23-8:主要程式碼(main.cpp),55,23-5.一些Client端的小程式,範例23-8:主要程式碼(main.cpp),56,23-5.一些Client端的小程式,範例23-8:主要程式碼(main.cpp),57,23-5.一些Client端的小程式,範例23-8:Stream Server/Client範例執行結果,58,23-5.一些Client端的小程式,範例23-9:POP3 Client範例範例說明目前在看信方便比較常用的通訊協定大概就是POP3以及IMAP。在範例23-9我們利用BCB提供的NMPOP3這個VCL元件實做PO

26、P3 Client。在這個程式中,大部分的功能(會用到的函式)都已經在這個範例程式中用到了。整個介面中,除了輸入Host以及使用者、密碼外,就是顯示出我們有多少郵件在Server上,在程式中我們只將每封信件的標題和送信者列出來。要看信的內容,也只需要去抓取NMPOP3-MailMessage中的一些屬性就可以了。在附夾檔方面,這個VCL元件也提供處理附帶檔的功能,一樣是在MailMessage中就可以把附帶檔的問題處理完。,59,23-5.一些Client端的小程式,範例23-9:主要程式碼(main.cpp)與POP3 Server連線並取得Mail List,60,23-5.一些Clien

27、t端的小程式,範例23-9:主要程式碼(main.cpp),61,23-5.一些Client端的小程式,範例23-9:POP3 Client範例執行結果,62,23-5.一些Client端的小程式,範例23-10:URL Encode/Decode範例範例說明URL這部分最主要就是提供網址的編碼以及解碼,當然也可以對網頁中的一些特殊字元作編碼的動作。在程式中我們分成上下兩個畫面,上面那部分為編碼,下面是解碼,大家可以試試看將一串文字編碼後再次解碼是不是會一樣,63,23-5.一些Client端的小程式,範例23-10:主要程式碼(main.cpp),64,23-5.一些Client端的小程式,

28、範例23-10:URL Encode/Decode範例執行結果,65,23-5.一些Client端的小程式,範例23-11:MIME/UUDecode範例範例說明UUEncode/UUDecode也是非常常用的編碼/解碼方式。在BCB的VCL元件中,當然也提供了MIME以及UUCode這兩種常用的編碼解碼函式,使用上非常的簡單方便。在傳送信件的過程中,我們常常使用MIME或是UUCode這類的軟體來做編碼及解碼的動作。MIME和UUCode是兩種不同的編法方法。例如我們現在將一封信件利用MIME編碼後,對方必須也要經過MIME的解碼後才看的懂。一般來說現在的一些Mail Server(如Sen

29、dmail、qmail、postfix)已經不再像以前常常會因為MIME編碼的關係產生亂碼的問題。在範例23-11中,因為我們是利用檔案來做MIME以及UUCode的編碼解碼,所以也有使用到File Stream。,66,23-5.一些Client端的小程式,範例23-11:主要程式碼(main.cpp),67,23-5.一些Client端的小程式,範例23-11:主要程式碼(main.cpp),68,23-5.一些Client端的小程式,範例23-11:主要程式碼(main.cpp),69,23-5.一些Client端的小程式,範例23-11:主要程式碼(main.cpp),70,23-5.

30、一些Client端的小程式,範例23-11:MIME/UUDecode範例執行結果,71,23-5.一些Client端的小程式,範例23-12:Finger Client範例範例說明Finger最主要的用途是用來查詢Server端的使用者的一些資本資料以及訊息,不過這幾年來因為Finger的Daemon不斷的傳出安全性上的漏洞,所以現在大部分的Server都已經將Finger這個Service關閉了。不過在這邊我們還是可以找到不少Server仍然有提供這項服務。,72,23-5.一些Client端的小程式,範例23-12:主要程式碼(main.cpp),73,23-5.一些Client端的小程

31、式,範例23-12:Finger Client範例執行結果,74,23-6.聊天室,聊天室,這是一個普遍大家都用過的網路軟體。現在我們將利用BCB所提供的元件,將聊天室寫出來。在範例23-13以及範例23-14中,我們分別實作聊天室的Server端以及Client端。Server端負責接受Client端的連線,並且將Client端傳過來的Message傳給每個正在線上的Client端,達到聊天室的功能。在這兩個範例中,我們主要是利用Server Socket以及Client Socket為網路連線的溝通管道,使用的Port是6666這個Port,所以在網路連線以及傳送的部分皆由Server/C

32、lient Socket這兩個VCL元件幫忙handle。,75,23-6.聊天室,範例23-13:聊天室Server實作範例說明Server端主要的工作就是要做到Concurrent Server,還好在這方面BCB已經幫我們處理好了。接著在Server端習慣上都會將連線紀錄給Log下來,所以我們就利用一些小技巧將Client連線的時間以及位址紀錄下來,也順便記錄了離線時間。除了Log的紀錄外,也可以將聊天紀錄紀錄下來,畢竟所有的Client端要收到訊息都必須要透過Server,所以在Server端想要做到監控或是紀錄都非常的容易。在Server端我們總共開啟了ServerSocket的這幾

33、種事件:OnClientConnect、OnClientDisconnect、以及OnClientRead在Form上面啟動了OnCreate事件,再加入清除Memo的按鈕,如此我們就完成了一個聊天室的Server了。在傳送資料到Client端我們用了一點小小的技巧,那就是用一個變數用來記錄目前連線的Client端數量,也藉此來判斷我們在connections這個物件中那些需要接收我們的訊息,藉此達到將資料傳給每個Client的功能。,76,23-6.聊天室,範例23-13:主要程式碼(main.cpp),77,23-6.聊天室,範例23-13:主要程式碼(main.cpp),78,23-6.

34、聊天室,範例23-13:聊天室Server實作執行結果,79,23-6.聊天室,範例23-14:聊天室Client實作範例說明Client端在設計上更是容易,我們只需要管送出訊息以及接收訊息就好,其他的幾乎可以不需要考慮。當然在送訊息之前的Connect部分,我們在程式中有做一些檢查的動作,例如還沒有Connect的時候就無法按下Send的按鈕,而且也要求一定要輸入User Name才可以,這樣才能讓收到訊息的人知道是誰說了這句話。如果希望再嚴謹一點,可以在Server端也一併記錄這個訊息的來源IP。在輸入Message的部分,我們跟前面一樣都利用Edit中的OnKeyPress這個Event

35、來偵測是不是有按下Enter鍵,當按下Enter鍵的時候就自動傳送訊息出去。在ClientSocket中我們共使用了OnConnect、OnDisconnect、以及OnRead這三個Event,再加上其他的一些檢查程式或是傳送的程式碼,這樣就即將完成這個範例程式。,80,23-6.聊天室,範例23-14:主要程式碼(main.cpp),81,23-6.聊天室,範例23-14:主要程式碼(main.cpp),82,23-6.聊天室,範例23-14:主要程式碼(main.cpp),83,23-6.聊天室,範例23-14:聊天室Client實作執行結果,84,23-7.CGI程式設計,CGI程式自

36、從Web開始大行其道時就慢慢的受到大家的注意,那什麼是CGI呢?簡單的說,就是Web Server端的程式 Web Server可以將這些程式執行之後的結果傳回給使用者,這樣的程式就叫做CGI程式。,85,23-7.CGI程式設計,CGI程式是放在Server端,當Client端要求某些需要CGI執行後才會有的資料時,Server端就會執行CGI程式(例如去抓取資料庫的資料),然後再把資料傳回給Client端。一般如果我們利用單純的C/C+語言來發展CGI程式的話,我們一開始會遇到的就是我們一定要先送個Header過去,沒有先送header就會產生Internal Server Error這樣

37、的錯誤。但是在BCB的環境中,我們不需要考慮這些東西,BCB自己會幫我們把該弄的、該送的自動處理完,程式開發者只需要單純的考慮要輸出哪些資料就好。,86,23-7.CGI程式設計,範例23-15:CGI程式實作範例說明Step 1:首先開啟一個新專案,並且選擇Web Server Application這個專案項目。接著會出現一個對話窗讓我們選擇CGI的格式,在這個程式中我們選擇CGI Stand-alone這種CGI的格式 Step 2:CGI開發環境介紹Step 3:CGI程式撰寫Step 4:編譯程式,87,23-7.CGI程式設計,範例23-15:主要程式碼(main.cpp),88,23-7.CGI程式設計,範例23-15:CGI程式實作執行結果上面就是一個最基本的CGI程式的開發過程。但是以最近幾年的發展,用C/C+寫CGI似乎漸漸的沒落,目前市場上比較常見的CGI語言有php、jsp、asp、以及用perl、shell等script語言寫的CGI,有興趣的讀者可以研究相關的書籍。,89,本章習題,請將NNTP Client完成。請將POP3 Client完成。以聊天室為藍本,改寫成五子棋對戰。將聊天室改用UDP Protocol實作。請說明這一章所說的CGI跟php、jsp、asp等有什麼異同。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号