基于UDP網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計課程設(shè)計報告1_第1頁
基于UDP網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計課程設(shè)計報告1_第2頁
基于UDP網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計課程設(shè)計報告1_第3頁
基于UDP網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計課程設(shè)計報告1_第4頁
基于UDP網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計課程設(shè)計報告1_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 網(wǎng)絡協(xié)議編程課程設(shè)計 長沙理工大學計算機與通信工程學院網(wǎng)絡協(xié)議編程課程設(shè)計報告 院 系 計算機與通信工程學院 專 業(yè) 網(wǎng)絡工程 班 級 網(wǎng)絡1101班 學 號 201158080110 學生姓名 趙思雨 指導教師 謝曉巍 課程成績 完成日期 2014年9月24日 課程設(shè)計成績評定院 系 計算機與通信工程 專 業(yè) 網(wǎng)絡工程 班 級 網(wǎng)絡1101班 學 號 201158080110 學生姓名 趙思雨 指導教師 謝曉巍 指導教師對學生在課程設(shè)計中的評價評分項目優(yōu)良中及格不及格學習態(tài)度與遵守紀律情況課程設(shè)計完成情況課程設(shè)計報告的質(zhì)量指導教師成績 指導教師簽字 年 月 日課程設(shè)計答辯組對學生在課程設(shè)計

2、中的評價評分項目優(yōu)良中及格不及格課程設(shè)計完成情況課程設(shè)計報告的質(zhì)量課程設(shè)計答辯答辯組成績 答辯組長簽字 年 月 日課程設(shè)計綜合成績 注:課程設(shè)計綜合成績指導教師成績60%答辯組成績40%課程設(shè)計任務書 計算機與通信工程 學院 網(wǎng)絡工程 專業(yè)課程名稱網(wǎng)絡協(xié)議編程課程設(shè)計時間2014年9月15日9月28日學生姓名趙思雨指導老師謝曉巍題 目基于udp網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計主要內(nèi)容: (1)理解udp協(xié)議的基本功能和工作原理。(2)培養(yǎng)運用理論知識解決實際問題的能力。(3)理解udp協(xié)議在java編程語言中的具體體現(xiàn)。(4)運用所學的知識,學會分析程序,并從實際上實現(xiàn)即時通訊的要求。要求:(1)

3、實現(xiàn)的是服務器和客戶端的通訊。(2)學會文獻檢索的基本方法和綜合運用文獻的能力。(3)通過課程設(shè)計培養(yǎng)嚴謹?shù)目茖W態(tài)度,認真的工作作風和團隊協(xié)作精神應當提交的文件:(1)課程設(shè)計報告。(2)課程設(shè)計附件(源程序、各類圖紙、實驗數(shù)據(jù)、仿真截圖等實證材料)。基于udp網(wǎng)絡通信系統(tǒng)的服務端程序設(shè)計學生姓名:趙思雨 指導老師:謝曉巍 摘 要 隨著網(wǎng)絡技術(shù)的發(fā)展及人們生活的需求,網(wǎng)絡聊天已越來越受到人們的青睞 。網(wǎng)絡聊天已經(jīng)成為人們工作生活中傳遞信息、交流感情的重要工具,給人們帶來了很大的方便。 本課題是開發(fā)一個基于udp的局域網(wǎng)聊天系統(tǒng),運用軟件工程的設(shè)計流程,綜合運用數(shù)據(jù)庫編程技術(shù)、windows程序

4、設(shè)計技術(shù)、網(wǎng)絡通訊技術(shù),此網(wǎng)絡聊天工具采用客戶端/服務器(c/s)模式,客戶端采用udp與服務器連接,客戶端與客戶端之間通過udp互相通訊。服務器端具有服務器端口設(shè)置,此聊天工具能實現(xiàn)多人聊天功能,適用于局域網(wǎng)使用的網(wǎng)絡聊天工具,其操作簡單,靈活性好,運行也比較穩(wěn)定。關(guān)鍵詞 網(wǎng)絡通訊;客戶端/服務器模型;用戶數(shù)據(jù)報協(xié)議;套接字1 引 言自進入信息化社會以來,人們的生活發(fā)生了翻天覆地的變化,所有這一切的實現(xiàn)都要歸功于計算機網(wǎng)絡。自從計算機網(wǎng)絡出現(xiàn)以來,網(wǎng)絡發(fā)展越來越迅速,其重要性更是不可估量?,F(xiàn)在,網(wǎng)絡已經(jīng)進入到我們生活的各個角落,大到網(wǎng)上理財、網(wǎng)上會議、網(wǎng)上戰(zhàn)爭,小到上網(wǎng)購物、查找資料,網(wǎng)上聊

5、天等,可以說網(wǎng)絡把我們的世界變“小”了,即使在天涯海角,我們也可以隨時聯(lián)系。一個最簡單且應用最廣泛的例子網(wǎng)上聊天,就是最好的證明。本課程設(shè)計將基于udp協(xié)議和局域網(wǎng)環(huán)境,使用java語言實現(xiàn)一個即時網(wǎng)絡通訊程序。1.1背景介紹隨著計算機網(wǎng)絡信息技術(shù)的日益發(fā)展和成熟,人們的生活因為網(wǎng)絡而變得更多姿多彩,基于網(wǎng)絡的通訊技術(shù)也如同雨后春筍般涌現(xiàn)到網(wǎng)絡世界中。tcp協(xié)議和udp協(xié)議是網(wǎng)絡通訊的基本協(xié)議。而對于普通的信息交流,udp協(xié)議則因為更方便簡單,所以常常采用udp協(xié)議開發(fā)這類即時通訊程序。(1)理解udp協(xié)議的基本功能和工作原理。(2)培養(yǎng)運用理論知識解決實際問題的能力。(3)理解udp協(xié)議在j

6、ava編程語言中的具體體現(xiàn)。(4)運用所學的知識,學會分析程序,并從實際上實現(xiàn)即時通訊的要求。1.2課程設(shè)計的目的1.3課程設(shè)計的基本任務本次課程設(shè)計是基于udp協(xié)議的通訊程序,所以其基本任務就是要實現(xiàn)的是服務器和客戶端的通訊,即服務器對端口進行監(jiān)聽,客戶端發(fā)送數(shù)據(jù)給服務器,服務器接收。實現(xiàn)了這個過程,就達到了本次課程設(shè)計的目的。2 設(shè)計原理2.1 udp協(xié)議原理udp協(xié)議的全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡中它與tcp協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在osi模型中,在第四層傳輸層,處于ip協(xié)議的上一層。udp有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進行排序的缺點,也就是說,當報文發(fā)送之后

7、,是無法得知其是否安全完整到達的。udp用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡應用。包括網(wǎng)絡視頻會議系統(tǒng)在內(nèi)的眾多的客戶/服務器模式的網(wǎng)絡應用都需要使用udp協(xié)議。udp協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天udp仍然不失為一項非常實用和可行的網(wǎng)絡傳輸層協(xié)議。 udp是osi參考模型中一種無連接的傳輸層協(xié)議,它主要用于不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成,提供面向事務的簡單不可靠信息傳送服務。udp 協(xié)議基本上是ip協(xié)議與上層協(xié)議的接口。udp協(xié)議適用端口分別運行在同一臺設(shè)備上的多個應用程序。 與所熟知的tc

8、p(傳輸控制協(xié)議)協(xié)議一樣,udp協(xié)議直接位于ip(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)osi(開放系統(tǒng)互連)參考模型,udp和tcp都屬于傳輸層協(xié)議。 udp協(xié)議的主要作用是將網(wǎng)絡數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個典型的數(shù)據(jù)包就是一個二進制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)包的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。 udp是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接(當然發(fā)送數(shù)據(jù)結(jié)束時也沒有連接可釋放)因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延。 udp使用的是盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的連接狀態(tài)表。udp是面向報文的。發(fā)送方的udp對應程序交下來的報文,在添加首部后就

9、向下交付給ip層。udp對應用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界。udp是定義用來在互連網(wǎng)絡環(huán)境中提供數(shù)據(jù)報交換的計算機通信的協(xié)議。此協(xié)議默認是ip下層協(xié)議。此協(xié)議提供了向另一用戶程序發(fā)送信息的最簡便的協(xié)議機制,不需要連接確認和保護復制,所以在軟件實現(xiàn)上比較簡單,需要的內(nèi)存空間比起tcp相對較小。udp包頭由4個域組成,其中每個域各占用2個字節(jié)。 (1)源端口號(16位):udp數(shù)據(jù)包的發(fā)送方使用的端口號。 (2)目標端口號(16位):udp數(shù)據(jù)包的接收方使用的端口號。udp協(xié)議使用端口號為不同的應用保留其各自的數(shù)據(jù)傳輸通道。udp和rap協(xié)議正是采用這一機制,實現(xiàn)對同

10、一時刻內(nèi)多項應用同時發(fā)送和接收數(shù)據(jù)的支持。 (3)數(shù)據(jù)報長度(16位)。數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內(nèi)的總的字節(jié)數(shù)。理論上,包含報頭在內(nèi)的數(shù)據(jù)包的最大長度為65535字節(jié)。不過,一些實際應用往往會限制數(shù)據(jù)包的大小,有時會降低到8192字節(jié)。(4)校驗值(16位)。udp協(xié)議使用包頭中的校驗值來保證數(shù)據(jù)的安全。2.2客戶端/服務器模式客戶機一方,udp應用程序功能如下:(1) 打開通信信道(申請一套接字),并連接到服務器在主機的保留端口,該端口對應服務器的udp進程。(2) 向服務器發(fā)出請求報文,等待接收應答。(3) 從服務器方收到最終應答結(jié)果,或在不再請求時關(guān)閉信道并終止客戶機進程。服

11、務器一方,udp應用程序動作如下:(1) 打開通信信道(申請一套接字),通知本地主機在某一保留端口接收客戶機請求。(2) 等待客戶請求到達指定端口。(3) 接收到請求,啟動一新進程處理用戶請求,同時釋放舊進程以響應新的客戶請求,一旦服務完成,關(guān)閉新進程與客戶的通信鏈路。(4) 繼續(xù)等待客戶機請求。(5) 如果不想響應客戶機請求,關(guān)閉服務器進程3.設(shè)計步驟此次設(shè)計是編寫一個基于udp的即時通訊程序,要求雙方能夠進行即時通訊,實現(xiàn)聊天和傳輸文件的功能。本課程設(shè)計主要負責的是通訊程序客戶端的設(shè)計。其具體設(shè)計如下。3.1 聊天模塊設(shè)計流程圖服務器端設(shè)計程序得出當前服務器的地址客戶端輸入所要連接的服務器

12、地址地址是否相同輸入客戶端發(fā)送的信息設(shè)置服務器端端口號為80接收客戶端發(fā)送的消息,發(fā)出服務器消息設(shè)置客戶端端口號為80接收服務器發(fā)送到消息,發(fā)出客戶端消息接受客戶端發(fā)送的消息,發(fā)出服務器消息消息內(nèi)容是否為null結(jié)束通訊 即時通訊程序客戶端/服務器端聊天模塊設(shè)計流程圖如圖所示。 圖1-1 聊天模塊流程圖3.2詳細設(shè)計根據(jù)udp協(xié)議的基本特性以及java語言編程特點,然后對比設(shè)計流程圖,在eclipse編程環(huán)境下編寫出實現(xiàn)該即時聊天系統(tǒng)的程序,具體步驟如下:1.打開eclise創(chuàng)建一個java工程,命名為udpchat。2.在java工程目錄下創(chuàng)建一個package,命名為udpchat。3.在

13、此package目錄下創(chuàng)建一個類,類名為client,創(chuàng)建完之后彈出一個編輯窗口,在此編輯環(huán)境下編寫客戶端程序,其聊天模塊服務器端核心程序如下:public class server public static void main(string args) new udpserver().start(); /啟動服務器 class udpserver extends thread public udpserver() /缺省構(gòu)造函數(shù) public void run() try datagramsocket socket = new datagramsocket(80); /建立一個socket

14、連接,端口號為80 system.out.println(服務器ip地址為: + inetaddress.getlocalhost().gethostaddress(); /得到服務器地址,并打印出來 /實現(xiàn)客戶端和服務器端的連續(xù)通信 while (true) / 接收 byte instr = new byte200; /定義數(shù)組,用來保存客戶端發(fā)送來的數(shù)據(jù) datagrampacket receive = new datagrampacket(instr, instr.length); socket.receive(receive); /接收客戶機發(fā)過來的數(shù)據(jù) string str = n

15、ew string(receive.getdata(); /提取數(shù)據(jù) system.out.println(客戶端消息: + str.trim(); /打印客戶機消息 / 發(fā)送 system.out.print(接收到的服務器消息:); /打印消息 str = new bufferedreader(new inputstreamreader(system.in).readline(); /得到輸入的數(shù)據(jù) byte outstr = new bytestr.length(); outstr = str.getbytes(); datagrampacket send = new datagramp

16、acket(outstr,outstr.length, receive.getaddress(), receive.getport(); /向客戶機發(fā)送數(shù)據(jù) socket.send(send); /執(zhí)行發(fā)送 catch (exception e) /錯誤處理 e.printstacktrace(); 文件傳輸模塊核心代碼如下: public void run() system.out.println(connected from + socket.getremotesocketaddress(); try bufferedreader in = new bufferedreader( new

17、inputstreamreader(socket.getinputstream(); /定義字符流 printwriter out = new printwriter( new bufferedwriter(new outputstreamwriter(socket.getoutputstream(), true); /創(chuàng)建打印對象 string inputline, outputline; handleinput handleinput = new handleinput(); outputline = handleinput.handle(null); out.println(output

18、line); while(inputline = in.readline() != null) /讀取信息 outputline = handleinput.handle(inputline); /每次讀一行 out.println(outputline); out.flush(); if(outputline.equals(bye) /結(jié)束標志 break; if(outputline.equals(password:valid) /prepare for the transmission of the file thread.sleep(2000); /線程休眠 inputstream f

19、ileinput = new fileinputstream(new file(default_file_name); /創(chuàng)建字節(jié)輸入流 outputstream fileoutput = new dataoutputstream( new bufferedoutputstream(socket.getoutputstream(); /創(chuàng)建字節(jié)輸出流 byte buf = new byte2048; /transmit the file int num = fileinput.read(buf); while(num != -1) fileoutput.write(buf, 0, num);

20、fileoutput.flush(); num = fileinput.read(buf); fileinput.close(); /關(guān)閉輸入流 fileoutput.close(); /關(guān)閉輸出流 in.close(); out.close(); system.out.println(disconnected from + socket.getremotesocketaddress(); socket.close(); /關(guān)閉套接字 catch (ioexception e) / todo auto-generated catch block e.printstacktrace(); cat

21、ch (interruptedexception e) / todo auto-generated catch block e.printstacktrace(); private class handleinput private map userinfo = new hashmap(); /定義一個map private string username = ; private string password = ; public handleinput() userinfo.put(me, me); /定義用戶名密碼 userinfo.put(abc, abc); userinfo.put

22、(123, 123); public static void main(string args) try serversocket serversocket = new serversocket(port); /創(chuàng)建一個serversocket system.out.println(server started); try while(true) socket thesocket = serversocket.accept(); /等待連接 try new simpleserver(thesocket); catch (exception e) e.printstacktrace(); the

23、socket.close(); catch (exception e) / todo: handle exception e.printstacktrace(); finally if(serversocket != null) serversocket.close(); /關(guān)閉連接 catch (ioexception e) / todo auto-generated catch block e.printstacktrace(); 3.3 運行程序運行程序,要結(jié)合服務器端程序,運行服務器端程序,結(jié)果如圖1-2。圖1-2 服務器程序運行結(jié)果運行客戶端程序,得出客戶端如圖1-3。圖1-3 客戶

24、端程序運行結(jié)果客戶端對話框輸入所要連接的服務器的ip地址,進行客戶端和服務器端的連接,連接后,出現(xiàn)如圖1-4結(jié)果。圖1-4 服務器和客戶端連接接下來,客戶端和服務器端進行連接后,可以進行正常的聊天了。其程序執(zhí)行結(jié)果如圖1-5所示。圖1-5 服務器和客戶端之間的聊天通訊接下來是在客戶端下載服務器上的文件。圖1-6 請求在客戶端上下載服務器上的文件圖1-7在客戶端登陸上服務器圖1-8 在客戶端成功下載服務器上的文件4結(jié)束語 經(jīng)過兩個星期的學習和實踐,我也算是順利的完成了這次課程設(shè)計,在實踐過程中遇到了很多的困難,感覺自己很難將理論與實踐相結(jié)合,覺得我們學習的那些知識也派不上用場,通過這次課設(shè),我深

25、刻的認識到實踐與理論必須要想結(jié)合才能使所學的知識變成可用的,通過自己的努力和老師同學們的幫助,多了一種看待問題的角度;我也發(fā)現(xiàn)了我所學知識不扎實,只是走馬觀花的應付考試,在以后的學習中需要時刻的告誡自己,踏踏實實做好每一步。本次課程設(shè)計是利用java語言編寫的,雖說自己以前接觸過這種語言,但是經(jīng)過這兩周的學習,我受益匪淺。首先,我進一步弄懂了java語言的編程方法和原則,并學會了編寫java程序。其次,使我更深層次的理解到java語言是一種面向?qū)ο蟮恼Z言,具有可視化編程的特點且代碼具有可移植等特點。本次課程設(shè)計是實現(xiàn)一個udp即時通訊程序。經(jīng)過編寫程序和運行,調(diào)試程序,我對java語言有了更深

26、的了解。另外,使我對udp協(xié)議的特點和工作過程有了更深的了解。udp協(xié)議提供無連接的、不可靠的服務。它工作于傳輸層,是傳輸層的重要協(xié)議之一。最后,udp協(xié)議是利用客戶端和服務器端模型來實現(xiàn)傳輸?shù)摹?本次課程設(shè)計使我明白了知識的重要性,同時也更加懂得實踐更不可少。我們要經(jīng)常把所學的知識運用到實踐,這樣,才能充分的融會貫通。同時,也使我認識到自己動手能力太差,為我以后的學習和發(fā)展提供了一個警鐘!本次課程設(shè)計的過程中,雖然遇到了不少問題,但最后還是成功的完成了。這次課設(shè)對于我而言是有很大的收獲,懂得獨立尋找資料學習,這是最大的收獲,在以后的工作中肯定會面臨不懂得問題,有了這次課設(shè)的經(jīng)驗,就能夠去獨立

27、學習并解決困難。參考文獻1 andrews.tanenbaum潘愛民計算機網(wǎng)絡(第四版)清華大學出版社,20042孫衛(wèi)琴java面向?qū)ο缶幊屉娮庸I(yè)出版社,20063 張立 等基于client/server模式的數(shù)據(jù)庫應用軟件的設(shè)計與實現(xiàn)計算機應用研究j,19994 俞俊 / 李功 / 汪曉平java網(wǎng)絡編程清華大學出版社,20055 謝希仁計算機網(wǎng)絡(第四版)m電子工業(yè)出版社,2003附錄1:聊天模塊客戶端程序設(shè)計清單package com.briup.gui;import java.io.bufferedreader;import java.io.ioexception;import ja

28、va.io.inputstreamreader;import .datagrampacket;import .datagramsocket;import .inetaddress;public class client public static void main(string args) new udpclient().start(); /調(diào)用udpclient()函數(shù),啟動客戶端 class udpclient extends thread public udpclient() public void run() /和服務器之間進行連接 system.out.print(請輸入所要通訊的

29、服務器的地址:); string serverip = null; /定義一個數(shù)組,用來保存服務器地址,初始化為null. /進行異常處理 try serverip = new bufferedreader(new inputstreamreader(system.in).readline(); /取得輸入的服務器地址 catch (ioexception e1) /錯誤處理 e1.printstacktrace(); finally try datagramsocket socket = new datagramsocket(); /建立socket連接 /實現(xiàn)服務器和客戶端程序間的不間斷通

30、訊 while (true) / 發(fā)送 system.out.print(客戶端發(fā)送的消息為:); /打印消息 string send = new bufferedreader(new inputstreamreader(system.in).readline(); /讀入客戶機輸入的消息 byte outstr = new bytesend.length(); /定義一個字節(jié)數(shù)組,長度為客戶端所發(fā)送的消息長度 outstr = send.getbytes(); /將得到的客戶端消息保存數(shù)組中 inetaddress address = inetaddress.getbyname(server

31、ip); datagrampacket packet = new datagrampacket(outstr, outstr.length, address, 80); /向服務器發(fā)送數(shù)據(jù)報 socket.send(packet); /發(fā)送數(shù)據(jù)報 / 接收 byte instr = new byte200; /定義數(shù)組,用來保存接受的數(shù)據(jù)報 packet = new datagrampacket(instr, instr.length); /接收數(shù)據(jù)報 socket.receive(packet); /接收數(shù)據(jù) string out = new string(packet.getdata(),

32、0,packet.getlength(); /取出信息 system.out.println(接受到的服務器消息: + out); /打印服務器發(fā)過來的信息 catch (exception e) / 錯誤處理 e.printstacktrace(); 附錄2:聊天模塊服務器程序設(shè)計清單package com.briup.gui;import java.io.bufferedreader;import java.io.inputstreamreader;import .datagrampacket;import .datagramsocket;import .inetaddress;publi

33、c class server public static void main(string args) new udpserver().start(); /啟動服務器 class udpserver extends thread public udpserver() /缺省構(gòu)造函數(shù) public void run() try datagramsocket socket = new datagramsocket(80); /建立一個socket連接,端口號為80 system.out.println(服務器ip地址為: + inetaddress.getlocalhost().gethostad

34、dress(); /得到服務器地址,并打印出來 /實現(xiàn)客戶端和服務器端的連續(xù)通信 while (true) / 接收 byte instr = new byte200; /定義數(shù)組,用來保存客戶端發(fā)送來的數(shù)據(jù) datagrampacket receive = new datagrampacket(instr, instr.length); socket.receive(receive); /接收客戶機發(fā)過來的數(shù)據(jù) string str = new string(receive.getdata(); /提取數(shù)據(jù) system.out.println(客戶端消息: + str.trim(); /打

35、印客戶機消息 / 發(fā)送 system.out.print(接收到的服務器消息:); /打印消息 str = new bufferedreader(new inputstreamreader(system.in).readline(); /得到輸入的數(shù)據(jù) byte outstr = new bytestr.length(); outstr = str.getbytes(); datagrampacket send = new datagrampacket(outstr,outstr.length, receive.getaddress(), receive.getport(); /向客戶機發(fā)送數(shù)

36、據(jù) socket.send(send); /執(zhí)行發(fā)送 catch (exception e) /錯誤處理 e.printstacktrace(); 附錄3:文件傳輸模塊客戶端程序設(shè)計清單import java.io.bufferedinputstream; import java.io.bufferedreader; import java.io.datainputstream; import java.io.file; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreade

37、r; import java.io.printwriter; import java.io.randomaccessfile; import .socket; import .unknownhostexception; public class simpleclient private static final int default_port = 8080; private static final string default_host = localhost; public static void main(string args) string host = default_host;

38、 int port = default_port; if(args.length 0) host = args0; if(args.length 1 ) port = integer.parseint(args1); socket thesocket = null; printwriter out = null; bufferedreader in = null, userin = null; try thesocket = new socket(host, port); in = new bufferedreader( new inputstreamreader(thesocket.geti

39、nputstream(); out = new printwriter(thesocket.getoutputstream(); userin = new bufferedreader( new inputstreamreader(system.in); system.out.println(connected to the simple file server); string fromuser, fromserver; while(fromserver = in.readline() != null) if(fromserver.equals(bye) break; else if(fro

40、mserver.equals(hi) system.out.println(do you want to get the zsy.txt file?(yes/no):); fromuser = userin.readline(); if(fromuser.equals(y) system.out.println(please input your username:); fromuser = userin.readline(); out.println(username: + fromuser); out.flush();/notice: if this sentence is lost, t

41、he info will not arrive at server side else break; else if(fromserver.startswith(username) if(fromserver.split(:)1.equals(valid) system.out.println(please input your password:); fromuser = userin.readline(); out.println(password: + fromuser); out.flush(); else system.out.println(please input your username:); fromuser = userin.readline(); out.println(u

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論