利用Socket實現(xiàn)雙機交互_第1頁
利用Socket實現(xiàn)雙機交互_第2頁
利用Socket實現(xiàn)雙機交互_第3頁
利用Socket實現(xiàn)雙機交互_第4頁
利用Socket實現(xiàn)雙機交互_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機網(wǎng)絡(luò)課程設(shè)計題目:通過Socket雙機交互院(系): 計算機與信息科學(xué)學(xué)院專 業(yè): 軟件工程班 級: 軟件1202 學(xué) 號: 1220740241 1220740240姓名:陳文琪黃弘毅 指導(dǎo)教師: 劉君 2014年12月24日目錄TOC\o"1-5"\h\z\o"CurrentDocument"設(shè)計任務(wù) 3\o"CurrentDocument"Java語言簡介 3簡單性 4面向?qū)ο?4多線程 4分布性 4體系結(jié)構(gòu)中立 5安全性 5\o"CurrentDocument"JAVASockets編程概述: 5\o"CurrentDocument"TCP簡介及特點原理 7\o"CurrentDocument"TCP的服務(wù)流程 7\o"CurrentDocument"客戶機/服務(wù)器通信的實現(xiàn) 10服務(wù)器端的開發(fā) 10客戶端的開發(fā) 10\o"CurrentDocument"程序的實現(xiàn) 11(1)服務(wù)器端的實現(xiàn) 11客戶端的實現(xiàn) 11打包發(fā)布 16\o"CurrentDocument"實驗中的問題 16\o"CurrentDocument"課程設(shè)計的總結(jié)體會 17\o"CurrentDocument"十.參考文獻 18【摘要】:所謂socket通常也稱作"套接字",應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。它是一種基于TCP/IP的編程接口,它采用客戶/服務(wù)器通信機制,使客戶端和服務(wù)器端通過Socket接口在網(wǎng)絡(luò)上實現(xiàn)連接和數(shù)據(jù)交換。它提供了一系列系統(tǒng)調(diào)用,使用戶可以方便地實現(xiàn)TCP和UDP等多種網(wǎng)絡(luò)協(xié)議的通信。它使用戶可以在網(wǎng)絡(luò)協(xié)議上工作而不必對該網(wǎng)絡(luò)協(xié)議有非常深入的了解。這樣編寫的程序可被迅速移植到任何支持Socket的網(wǎng)絡(luò)系統(tǒng)中去。本文通過主要利用JavaSocket來實現(xiàn)雙機通信,實現(xiàn)一個簡單的服務(wù)器,客戶端聊天通信工具。并對JavaSocket的實現(xiàn)進行簡單的分析和講解,通過本文以達到對Socket的原理又一個較清晰的認識。設(shè)計任務(wù)1.利用JavaSocket來實現(xiàn)雙機通信,理解TCP狀態(tài)機圖。2.要求使用JavaSocket編程,采用其中的TCP面向連接方式,實現(xiàn)文本數(shù)據(jù)的交換。黃弘毅:對程序進行測試,主要在局域網(wǎng)和虛擬機和與物理機之間測試。陳文琪:編寫程序代碼,實現(xiàn)雙機交互通信。Java語言簡介Java語言的優(yōu)點主要表現(xiàn)在:簡單、面向?qū)ο?、多線程、分布性、體系結(jié)構(gòu)中立、安全性等方面。(1)簡單性Java與C++語言非常相近,但Java比C++簡單,它拋棄了C++中的一些不是絕對必要的功能,如頭文件、預(yù)處理文件、指針、結(jié)構(gòu)、運算符重載、多重繼承以及自動強迫同型。Java實現(xiàn)了自動的垃圾收集,簡化了內(nèi)存管理的工作。這使程序設(shè)計更加簡便,同時減少了出錯的可能。(2)面向?qū)ο驤ava提供了簡單的類機制和動態(tài)的構(gòu)架模型。對象中封裝了它的狀態(tài)變量和方法,很好地實現(xiàn)了模塊化和信息隱藏;而類則提供了一類對象的原型,通過繼承和重載機制,子類可以使用或重新定義父類或超類所提供的方法,從而既實現(xiàn)了代碼的復(fù)用,又提供了一種動態(tài)的解決方案。Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計語言,它除了數(shù)組、布爾和字符三個基本數(shù)據(jù)類型外的其它類都是對象,它不再支持全局變量。在Java中,如果不創(chuàng)建新類就無法創(chuàng)建程序,Java程序在運行時必須先創(chuàng)建一個類的實例,然后才能提交運行。Java同樣支持繼承特性,Java的類可以從其它類中繼承行為,但Java只支持類的單重繼承,即每個類只能從一個類中繼承。Java支持界面,界面允許程序員定義方法但又不立即實現(xiàn),一個類可以實現(xiàn)多個界面,利用界面可以得到多重繼承的許多優(yōu)點而又沒有多重繼承的問題。(3)多線程多線程使應(yīng)用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務(wù),他們之間互不干涉,不會由于一處等待影響其他部分,這樣容易實現(xiàn)網(wǎng)絡(luò)上的實時交互操作。Java程序可以有多個執(zhí)行線程,如可以讓一個線程進行復(fù)雜的計算,而讓另一個線程與用戶進行交互,這樣用戶可以在不中斷計算線程的前提下與系統(tǒng)進行交互。多線程保證了較高的執(zhí)行效率。(4)分布性Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便的訪問其他對象。(5)體系結(jié)構(gòu)中立Java是一種網(wǎng)絡(luò)語言,為使Java程序能在網(wǎng)絡(luò)的任何地方運行,Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼結(jié)構(gòu)的文件格式。Java為了做到結(jié)構(gòu)中立,除生成機器無關(guān)的字節(jié)碼外,還制定了完全統(tǒng)一的語言文本,如Java的基本數(shù)據(jù)類型不會隨目標(biāo)機的變化而變化,一個整型總是32位,一個長整型總是64位。為了使Java的應(yīng)用程序能不依賴于具體的系統(tǒng),Java語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當(dāng)程序使用這些包時,可以確保它能運行在各種支持Java的平臺上。java.lang:一般的語言包。其中包括用于字符串處理、多線程、異常處理和數(shù)字函數(shù)等的類,該包是實現(xiàn)Java程序運行平臺的基本包java.util:實用工具包。其中包括哈希表、堆棧、時間和日期等java.io:基于流模型的輸入/輸出包。該包用統(tǒng)一的流模型實現(xiàn)了各種格式的輸入/輸出,包括文件系統(tǒng)、網(wǎng)絡(luò)和設(shè)備的輸入/輸出等:網(wǎng)絡(luò)包。該包支持TCP/IP協(xié)議,其中提供了socket、URL和WWW的編程接口java.awt:抽象窗口工具集。其中實現(xiàn)了可以跨平臺的圖形用戶界面組件,包括窗口、菜單、滾動條和對話框等java.applet:支持applet程序設(shè)計的基本包(6)安全性用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),這樣就防止了程序員使用欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產(chǎn)生的錯誤。JAVASockets編程概述:用Java語言編程實現(xiàn)Socket通信,其原理與使用其他語言基本相同,不同之處是:(1)java是跨平臺的編程語言,所以用java編寫的Socket通信程序可以工作在所有支持TCP/IP協(xié)議和java的軟硬件平臺上;(2)因為Java是面向?qū)ο蟮恼Z言,所以在編程中需要使用一些與Socket有關(guān)的系統(tǒng)類,其中用于實現(xiàn)流Socket的類主要有:InetAddress類,Socket類,ServerSocket類InetAddress類的對象用來保存IP地址,Socket類的對象用來創(chuàng)建Socket通信的客戶端,Socket通信的服務(wù)器端則有ServerSocket類的對象來實現(xiàn),用上述幾個類就可以很方便的生成用戶自己的TCP/IP通信程序。這幾個類都屬于J包,大部分用來處理網(wǎng)絡(luò)操作的系統(tǒng)類都包含在這個包中,所以用JAVA編寫程序是,一般要在程序開始部分用import語句加載這個包,以便引入這些類。用JAVA語言編寫Socket程序的過程就是創(chuàng)建和定義Socket類和ServerSocket類的子類的過程。TCP簡介及特點原理TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運輸層(Transportlayer)通信協(xié)議。在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能。在因特網(wǎng)協(xié)議族中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。TCP建立連接之后,通信雙方都同時可以進行數(shù)據(jù)的傳輸,其次,他是全雙工的;在保證可靠性上,采用超時重傳和捎帶確認機制。在流量控制上,采用滑動窗口協(xié)議,協(xié)議中規(guī)定,對于窗口內(nèi)未經(jīng)確認的分組需要重傳。在擁塞控制上,采用慢啟動算法。TCP提供計算機程序間連接、檢測和丟棄重復(fù)的分組、完成數(shù)據(jù)報的確認、流量控制和網(wǎng)絡(luò)擁塞。TCP的服務(wù)流程盡管TCP和UDP都使用相同的網(wǎng)絡(luò)層(IP),TCP卻向應(yīng)用層提供與UDP完全不同的服務(wù),TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。面向連接意味著兩個使用TCP的應(yīng)用(通常是一個客戶和一個服務(wù)器)在彼此交換數(shù)據(jù)之前必須先建立一個TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說“喂”,然后才說明是誰。在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用于TCP。TCP通過下列方式來提供可靠性:應(yīng)用數(shù)據(jù)被分割成TCP認為最適合發(fā)送的數(shù)據(jù)塊。這和UDP完全不同,應(yīng)用程序產(chǎn)生的數(shù)據(jù)報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段(segment)TCP如何確定報文段的長度。當(dāng)TCP發(fā)出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發(fā)這個報文段。?當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個確認。這個確認不是立即發(fā)送,通常將推遲幾分之一秒TCP將保持它首部和數(shù)據(jù)的檢驗和。這是一個端到端的檢驗和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發(fā)端超時并重發(fā))。TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機致使較慢主機的緩沖區(qū)溢出。TCP對字節(jié)流的內(nèi)容不作任何解釋。TCP不知道傳輸?shù)臄?shù)據(jù)字節(jié)流是二進制數(shù)據(jù),還是ASCII字符、EBCDIC字符或者其他類型數(shù)據(jù)。對字節(jié)流的解釋由TCP連接雙方的應(yīng)用層解釋。TCP是因特網(wǎng)中的傳輸層協(xié)議,使用三次握手協(xié)議建立連接。當(dāng)主動方發(fā)出SYN連接請求后,等待對方回答SYN,ACK。這種建立連接的方法可以防止產(chǎn)生錯誤的連接,TCP使用的流量控制協(xié)議是可變大小的滑動窗口協(xié)議。第一次握手:建立連接時,客戶端發(fā)送SYN包(SEQ=x)到服務(wù)器,并進入SYN_SEND狀態(tài),等待服務(wù)器確認。第二次握手:服務(wù)器收到SYN包,必須確認客戶的SYN(ACK=x+l),同時自己也送一個SYN包(SEQ=y),即SYN+ACK包,此時服務(wù)器進入SYN_RECV狀態(tài)。第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認包ACK(ACK=y+1),此包發(fā)送完畢,客戶端和服務(wù)器時入Established狀態(tài),完成三次握手。六.客戶機/服務(wù)器通信的實現(xiàn)(1)服務(wù)器端的開發(fā)1.服務(wù)器端實現(xiàn)對主機某個端口不斷監(jiān)聽,并不斷接受客戶端的連接請求,當(dāng)受到連接后打印客戶的的信息并向客戶端完成一次服務(wù)2.使用readUTF方法的DataInputStream處理流提供的方法,功能為讀取滿足UTF格式的字符串。并使用writeUTF方法為DataOutputStream處理流提供的方法,功能為寫出滿足UTF格式的字符。一般在網(wǎng)絡(luò)中發(fā)生消息都在發(fā)送端用writeUTF方法寫,在接收端使用readUTF方法讀取,這樣程序的兼容性強,不容易受到亂碼。(2)客戶端的開發(fā)1.客戶端用于對某個固定IP的服務(wù)器進行連接,接著向服務(wù)器發(fā)送一條消息,最后接受服務(wù)器的返回消息并打印。2.為了與服務(wù)器對應(yīng),發(fā)送消息還要使用DataInputStream的writeUTF方法。同時應(yīng)該注意的兩邊的首發(fā)順序是互逆的,服務(wù)器現(xiàn)售后發(fā),客戶端先發(fā)后收。七.程序的實現(xiàn)(1)服務(wù)器端的實現(xiàn)服務(wù)器端用一個類Sa來實現(xiàn),創(chuàng)建一個ServerSocket類的對象實現(xiàn)對端口9999的不斷監(jiān)聽,直到受到客戶端的信息。服務(wù)器端代碼如下:importjava.io.*;import.*;importjava.util.*;publicclassSa{publicstaticvoidmain(String[]args){intcount=0;//Strings="";try{ServerSocketserver=newServerSocket(9999);//打印提示信息System.out.println(”服務(wù)器已經(jīng)對9999端口進行監(jiān)聽“);//服務(wù)器循環(huán)接受客戶斷請求//if(!s.equals("end")){while(true){Socketsc=server.accept();//獲取當(dāng)前連接的輸入流,并使用處理流進行封裝DataInputStreamdin=newDataInputStream(sc.getInputStream());//獲取當(dāng)前連接的輸出流,并使用處理流驚喜封裝DataOutputStreamdout=newDataOutputStream(sc.getOutputStream());//打印客戶端的信息System.out.println("======================="+(++count)+"=================");System.out.print(”客戶端口號:"+sc.getInetAddress());System.out.println(”,本地端口:"+sc.getPort());System.out.println(”客戶端信息:"+din.readUTF());//向客戶端發(fā)送回應(yīng)信息dout.writeUTF(sc.getInetAddress()+"您好,現(xiàn)在服務(wù)器的時間是:"+(newDate())+".")//關(guān)閉流//BufferedReader in=new BufferedReader(newInputStreamReader(din.read()));//s=in.readLine();//s=din.readUTF();din.close();dout.close();sc.close();}//else//server.close();}}catch(Exceptione){e.printStackTrace();}}運行結(jié)果(2)客戶端的實現(xiàn)客戶端主要用Sb類來實現(xiàn)對服務(wù)器端的連接功能,創(chuàng)建一個Socket對象實現(xiàn)對服務(wù)器的連接??头舜a如下:importjava.io.*;import.*;publicclassSb{publicstaticvoidmain(String[]args){Stringm1,m2;m1="42";m2="";try{//創(chuàng)建連接到服務(wù)器的Socket對象while(!m2.equals("end")){Socketsc=newSocket(m1,9999);DataInputStreamdin=newDataInputStream(sc.getInputStream());DataOutputStreamdout=newDataOutputStream(sc.getOutputStream());System.out.println(”連接成功,請輸入:”);BufferedReaderInputStreamReader(System.in));m2=input.readLine();dout.writeUTF(m2);System.out.println(din.readUTF());din.close();dout.close();sc.close();}}catch(Exceptione){e.printStackTrace();}}運行結(jié)果3)打包發(fā)布要發(fā)布應(yīng)用程序,需要將應(yīng)用程序打包。使用jar.exe,可以把應(yīng)用程序中涉及的類和圖片壓縮為一個jar文件,這樣可以便利發(fā)布程序。首先,編寫一個清單文件,名為manifest.mf,其代碼如下:Manifest-Version:1.0Created-By:1.6.0_06(SunMicrosystemsInc.)Main-class:Sb將清單文件保存到.cla

溫馨提示

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

評論

0/150

提交評論