java網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)_第1頁(yè)
java網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)_第2頁(yè)
java網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)_第3頁(yè)
java網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)_第4頁(yè)
java網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)》論文《網(wǎng)絡(luò)編程技術(shù)課程設(shè)計(jì)》論文2012—2013學(xué)年第二學(xué)期題目:TCP網(wǎng)絡(luò)通信程序?qū)I(yè)班級(jí):學(xué)號(hào):姓名:指導(dǎo)老師:日期:PAGE2TCP網(wǎng)絡(luò)通信程序設(shè)計(jì)與實(shí)現(xiàn)摘要:目前,基于TCP/IP協(xié)議的網(wǎng)絡(luò)得到了普及和飛速的發(fā)展,Windows下的網(wǎng)絡(luò)程序越來(lái)越顯得重要。利用TCP/IP協(xié)議提供的編程接口———Socket(套接字)可以開(kāi)發(fā)出TCP/IP應(yīng)用程序。正確的使用WindowsSocket,就可使得不同地址下的進(jìn)程得以在Windows環(huán)境下順利進(jìn)行各種網(wǎng)絡(luò)通信,因此研究WinSock更有意義。而基于TCP/IP協(xié)議網(wǎng)絡(luò)環(huán)境下的應(yīng)用程序是通過(guò)客戶機(jī)/服務(wù)器(C/S)作用方式模式在網(wǎng)絡(luò)(應(yīng)用)編程界面實(shí)現(xiàn)的。本次實(shí)驗(yàn)采用java語(yǔ)言設(shè)計(jì)一個(gè)基于C/S模式的TCP網(wǎng)絡(luò)通訊程序。實(shí)現(xiàn)客戶端與服務(wù)器端之間的數(shù)據(jù)傳輸。關(guān)鍵詞:TCP/IP網(wǎng)絡(luò)通信javaC/S(client/server)模式1引言計(jì)算機(jī)網(wǎng)絡(luò)通信是以計(jì)算機(jī)為信息接收終端,融合了計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的通信方式。計(jì)算機(jī)網(wǎng)絡(luò)通信順暢的重要保障就是網(wǎng)絡(luò)建設(shè)。同時(shí),網(wǎng)絡(luò)建設(shè)也是計(jì)算機(jī)應(yīng)用普及的基本條件,是推動(dòng)經(jīng)濟(jì)社會(huì)發(fā)展的根本。因此,了解計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)及網(wǎng)絡(luò)編程技巧對(duì)于IT技術(shù)人員是必備技術(shù)之一。2基礎(chǔ)理論和技術(shù)2.1網(wǎng)絡(luò)基礎(chǔ)知識(shí)網(wǎng)絡(luò)上的計(jì)算機(jī)要互相通信,必須遵循一定的協(xié)議。目前使用最廣泛的網(wǎng)絡(luò)協(xié)議是Internet上所使用的TCP/IP協(xié)議。

在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚桑蒊P地址可以唯一地確定Internet上的一臺(tái)主機(jī)。而TCP層則提供面向應(yīng)用的可靠的或非可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對(duì)象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的。網(wǎng)絡(luò)編程主要解決兩大問(wèn)題:(1)如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺(tái)或多臺(tái)主機(jī)(2)找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸。目前較流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請(qǐng)求并予以響應(yīng)??蛻魟t在需要服務(wù)時(shí)向服務(wù)器提出申請(qǐng)。服務(wù)器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽(tīng)網(wǎng)絡(luò)端口,一旦有客戶請(qǐng)求,就會(huì)啟動(dòng)一個(gè)服務(wù)進(jìn)程來(lái)響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽(tīng)服務(wù)端口,使后來(lái)的客戶也能及時(shí)得到服務(wù)。IP地址:標(biāo)識(shí)計(jì)算機(jī)等網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)地址,由四個(gè)8位的二進(jìn)制數(shù)組成,中間以小數(shù)點(diǎn)分隔。

比如,0

主機(jī)名(hostname):網(wǎng)絡(luò)地址的助記名,按照域名進(jìn)行分級(jí)管理。

端口號(hào)(portnumber):網(wǎng)絡(luò)通信時(shí)同一機(jī)器上的不同進(jìn)程的標(biāo)識(shí)。

服務(wù)類(lèi)型(service):網(wǎng)絡(luò)的各種服務(wù)。

在Internet上IP地址和主機(jī)名是一一對(duì)應(yīng)的,通過(guò)域名解析可以由主機(jī)名得到機(jī)器的IP,由于機(jī)器名更接近自然語(yǔ)言,容易記憶,所以使用比IP地址廣泛,但是對(duì)機(jī)器而言只有IP地址才是有效的標(biāo)識(shí)符。

光用主機(jī)名或IP地址來(lái)標(biāo)識(shí)這么多個(gè)進(jìn)程顯然是不夠的,只有通過(guò)主機(jī)名或IP地址和端口號(hào)的組合才能唯一的確定網(wǎng)絡(luò)通訊中的對(duì)象:進(jìn)程。服務(wù)類(lèi)型是那些已經(jīng)被TCP/IP協(xié)議標(biāo)準(zhǔn)化的在TCP應(yīng)用層上的應(yīng)用,一般都是網(wǎng)絡(luò)服務(wù)器(軟件)??梢跃帉?xiě)自己的基于網(wǎng)絡(luò)的服務(wù)器,但都不能被稱作標(biāo)準(zhǔn)的服務(wù)類(lèi)型。兩類(lèi)傳輸協(xié)議:TCP/UDP

在TCP/IP的傳輸層同時(shí)存在TCP和UDP兩個(gè)協(xié)議。

TCP(TranferControlProtocol):一種面向連接(可靠)的傳輸控制協(xié)議。通過(guò)TCP協(xié)議傳輸,得到的是一個(gè)順序、無(wú)差錯(cuò)的數(shù)據(jù)流。發(fā)送方和接收方成對(duì)的兩個(gè)socket之間必須建立連接,以便在TCP協(xié)議的基礎(chǔ)上進(jìn)行通信,當(dāng)一個(gè)socket(通常都是serversocket)等待建立連接時(shí),另一個(gè)socket可以要求進(jìn)行連接,一旦這兩個(gè)socket連接起來(lái),它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。UDP(UserDatagramProtocol):一種無(wú)連接(不可靠)的用戶數(shù)據(jù)報(bào)協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。比較TCP\Datagram:

TCP——可靠,傳輸大小無(wú)限制,但是需要連接建立時(shí)間,差錯(cuò)控制開(kāi)銷(xiāo)大。

UDP——不可靠,差錯(cuò)控制開(kāi)銷(xiāo)較小,傳輸大小限制在64K以下,不需要建立連接。

TCP雖然有諸多優(yōu)點(diǎn),但是也有缺點(diǎn):TCP傳輸?shù)男什蝗鏤DP高,對(duì)數(shù)據(jù)內(nèi)容正確性的檢驗(yàn)要占用計(jì)算機(jī)處理時(shí)間和網(wǎng)絡(luò)帶寬,此外在許多應(yīng)用中并不需要保證嚴(yán)格的傳輸可靠性,比如視頻會(huì)議系統(tǒng),這種情況下顯然使用UDP會(huì)更合理一些。2.2java網(wǎng)絡(luò)編程技術(shù)Java語(yǔ)言是在網(wǎng)絡(luò)環(huán)境下誕生的,所以Java語(yǔ)言雖然不能說(shuō)是對(duì)于網(wǎng)絡(luò)編程的支持最好的語(yǔ)言,但是必須說(shuō)是一種對(duì)于網(wǎng)絡(luò)編程提供良好支持的語(yǔ)言,使用Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程將是一件比較輕松的工作。2.3Socket套接字所謂socket通常也稱作"套接字",應(yīng)用程序通常通過(guò)"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。以J2SDK-1.3為例,Socket和ServerSocket類(lèi)庫(kù)位于包中。ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過(guò)SocketImpl類(lèi)及其子類(lèi)完成的。重要的SocketAPI:.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見(jiàn)JDK-1.3文檔。Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)InputStream對(duì)象實(shí)例。getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。注意:其中g(shù)etInputStream和getOutputStream方法均可能會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)。服務(wù)器監(jiān)聽(tīng):是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏?qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。3系統(tǒng)功能設(shè)計(jì)網(wǎng)絡(luò)編程都是由客戶端和服務(wù)器端組成。一客戶端網(wǎng)絡(luò)編程步驟客戶端(Client)是指網(wǎng)絡(luò)編程中首先發(fā)起連接的程序,客戶端一般實(shí)現(xiàn)程序界面和基本邏輯實(shí)現(xiàn),在進(jìn)行實(shí)際的客戶端編程時(shí),無(wú)論客戶端復(fù)雜還是簡(jiǎn)單,以及客戶端實(shí)現(xiàn)的方式,客戶端的編程主要由三個(gè)步驟實(shí)現(xiàn):1、建立網(wǎng)絡(luò)連接客戶端網(wǎng)絡(luò)編程的第一步都是建立網(wǎng)絡(luò)連接。在建立網(wǎng)絡(luò)連接時(shí)需要指定連接到的服務(wù)器的IP地址和端口號(hào),建立完成以后,會(huì)形成一條虛擬的連接,后續(xù)的操作就可以通過(guò)該連接實(shí)現(xiàn)數(shù)據(jù)交換了。2、交換數(shù)據(jù)連接建立以后,就可以通過(guò)這個(gè)連接交換數(shù)據(jù)了。交換數(shù)據(jù)嚴(yán)格按照請(qǐng)求響應(yīng)模型進(jìn)行,由客戶端發(fā)送一個(gè)請(qǐng)求數(shù)據(jù)到服務(wù)器,服務(wù)器反饋一個(gè)響應(yīng)數(shù)據(jù)給客戶端,如果客戶端不發(fā)送請(qǐng)求則服務(wù)器端就不響應(yīng)。根據(jù)邏輯需要,可以多次交換數(shù)據(jù),但是還是必須遵循請(qǐng)求響應(yīng)模型。3、關(guān)閉網(wǎng)絡(luò)連接在數(shù)據(jù)交換完成以后,關(guān)閉網(wǎng)絡(luò)連接,釋放程序占用的端口、內(nèi)存等系統(tǒng)資源,結(jié)束網(wǎng)絡(luò)編程。最基本的步驟一般都是這三個(gè)步驟,在實(shí)際實(shí)現(xiàn)時(shí),步驟2會(huì)出現(xiàn)重復(fù),在進(jìn)行代碼組織時(shí),由于網(wǎng)絡(luò)編程是比較耗時(shí)的操作,所以一般開(kāi)啟專門(mén)的現(xiàn)場(chǎng)進(jìn)行網(wǎng)絡(luò)通訊。二服務(wù)器端網(wǎng)絡(luò)編程步驟服務(wù)器端(Server)是指在網(wǎng)絡(luò)編程中被動(dòng)等待連接的程序,服務(wù)器端一般實(shí)現(xiàn)程序的核心邏輯以及數(shù)據(jù)存儲(chǔ)等核心功能。服務(wù)器端的編程步驟和客戶端不同,是由四個(gè)步驟實(shí)現(xiàn),依次是:1、監(jiān)聽(tīng)端口服務(wù)器端屬于被動(dòng)等待連接,所以服務(wù)器端啟動(dòng)以后,不需要發(fā)起連接,而只需要監(jiān)聽(tīng)本地計(jì)算機(jī)的某個(gè)固定端口即可。這個(gè)端口就是服務(wù)器端開(kāi)放給客戶端的端口,服務(wù)器端程序運(yùn)行的本地計(jì)算機(jī)的IP地址就是服務(wù)器端程序的IP地址。2、獲得連接當(dāng)客戶端連接到服務(wù)器端時(shí),服務(wù)器端就可以獲得一個(gè)連接,這個(gè)連接包含客戶端的信息,例如客戶端IP地址等等,服務(wù)器端和客戶端也通過(guò)該連接進(jìn)行數(shù)據(jù)交換。一般在服務(wù)器端編程中,當(dāng)獲得連接時(shí),需要開(kāi)啟專門(mén)的線程處理該連接,每個(gè)連接都由獨(dú)立的線程實(shí)現(xiàn)。3、交換數(shù)據(jù)服務(wù)器端通過(guò)獲得的連接進(jìn)行數(shù)據(jù)交換。服務(wù)器端的數(shù)據(jù)交換步驟是首先接收客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),然后進(jìn)行邏輯處理,再把處理以后的結(jié)果數(shù)據(jù)發(fā)送給客戶端。簡(jiǎn)單來(lái)說(shuō),就是先接收再發(fā)送,這個(gè)和客戶端的數(shù)據(jù)交換數(shù)序不同。其實(shí),服務(wù)器端獲得的連接和客戶端連接是一樣的,只是數(shù)據(jù)交換的步驟不同。當(dāng)然,服務(wù)器端的數(shù)據(jù)交換也是可以多次進(jìn)行的。在數(shù)據(jù)交換完成以后,關(guān)閉和客戶端的連接。4、關(guān)閉連接當(dāng)服務(wù)器程序關(guān)閉時(shí),需要關(guān)閉服務(wù)器端,通過(guò)關(guān)閉服務(wù)器端使得服務(wù)器監(jiān)聽(tīng)的端口以及占用的內(nèi)存可以釋放出來(lái),實(shí)現(xiàn)了連接的關(guān)閉。4系統(tǒng)實(shí)現(xiàn)(一)主要源代碼功能分析.客戶端的Socket的創(chuàng)建:try{//當(dāng)觸發(fā)連接按鈕時(shí),實(shí)例化一個(gè)客戶端client=newSocket("",2000);//隱藏連接界面,顯示通信界面frame.setVisible(false);frame1.setVisible(true);jieshoukuang.append("已經(jīng)連接上服務(wù)器!"+"\n");}catch(IOExceptione1){System.out.println("鏈接失?。?);e1.printStackTrace();}}.服務(wù)端ServerSocket的創(chuàng)建:newServer();//生成服務(wù)器界面//通過(guò)服務(wù)器端構(gòu)造函數(shù)ServerSocket(port)實(shí)例化一個(gè)服務(wù)器端口ServerSocketserver=newServerSocket(2000);text.append("監(jiān)聽(tīng)2000端口"+"\n");//實(shí)例化一個(gè)接受服務(wù)器數(shù)據(jù)的對(duì)象Socketclient=server.accept();客戶端程序界面:frame=newJFrame();adress=newJLabel("IP地址");port=newJLabel("端口號(hào)");adresstext=newJTextField("",10);porttext=newJTextField("2000",10);connect=newJButton("連接");//連接界面的布局frame.setLayout(newFlowLayout());frame.add(adress);frame.add(adresstext);frame.add(port);frame.add(porttext);frame.add(connect);frame.setVisible(true);frame.setSize(200,150);connect.addActionListener(this);//通信界面的實(shí)例化frame1=newJFrame();shuru=newJLabel("請(qǐng)輸入");shurukuang=newJTextArea("請(qǐng)輸入····",5,40);panel1=newJPanel();panel1.add(shuru);panel1.add(shurukuang);panel1.setLayout(newFlowLayout());send=newJButton("發(fā)送");panel2=newJPanel();jieshou=newJLabel("已接受");jieshoukuang=newTextArea(8,60);jieshoukuang.setEditable(false);panel2.add(jieshou);panel2.add(jieshoukuang);panel2.setLayout(newFlowLayout());frame1.setLayout(newFlowLayout());//通信界面都的布局frame1.add(BorderLayout.NORTH,panel1);frame1.add(send);frame1.add(BorderLa

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論