傳輸層中多路復用與解復用模擬程序的實現(xiàn)_第1頁
傳輸層中多路復用與解復用模擬程序的實現(xiàn)_第2頁
傳輸層中多路復用與解復用模擬程序的實現(xiàn)_第3頁
傳輸層中多路復用與解復用模擬程序的實現(xiàn)_第4頁
傳輸層中多路復用與解復用模擬程序的實現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、山東建筑大學計算機科學與技術(shù)學院課程設(shè)計說明書題 目: 傳輸層中多路復用與解復用模擬程序的實現(xiàn)課 程: 計算機網(wǎng)絡(luò)課程設(shè)計院 (部): 計算機科學與技術(shù)專 業(yè): 網(wǎng)絡(luò)工程班 級: 網(wǎng)絡(luò)062學生姓名: 顏璐學 號: 2006111162指導教師: 徐功文 完成日期: 2009-07-09目 錄課程設(shè)計任務書I傳輸層中多路復用與解復用模擬程序的實現(xiàn)(Java或C+)1一、問題描述1二、基本要求1三、設(shè)計思想1四、系統(tǒng)結(jié)構(gòu)5五、程序流程6六、源程序7七、測試數(shù)據(jù)23八、測試情況23結(jié) 論25參考文獻26課程設(shè)計指導教師評語27山東建筑大學計算機科學與技術(shù)學院課程設(shè)計任務書設(shè)計題目傳輸層中多路復用與

2、解復用模擬程序的實現(xiàn)(Java或C+)已知技術(shù)參數(shù)和設(shè)計要求1.已知參數(shù):應用層中的各類應用 2.設(shè)計要求: 2.1能夠處理應用層中常用的幾種應用,自己創(chuàng)建進程表示HTTP、FTP等至少兩種應用;2.2構(gòu)造所需的報文段數(shù)據(jù);2.3能夠?qū)崿F(xiàn)無連接的多路復用和解復用的模擬程序,通過socket處理,在服務器端能夠顯示客戶端請求的是何種應用;2.4能夠?qū)崿F(xiàn)面向連接的多路復用和解復用的模擬程序,要求同上。3. Java環(huán)境為MyEclipse, C+環(huán)境為Visual C+設(shè)計內(nèi)容與步驟1.熟悉多路復用與解復用的實現(xiàn)原理;2.熟悉TCP/UDP報文相關(guān)結(jié)構(gòu);3.TCP/UDP報文的構(gòu)造;4.無連接的多

3、路復用和解復用的模擬程序的設(shè)計與實現(xiàn);5.面向連接的多路復用和解復用的模擬程序的設(shè)計與實現(xiàn);6.課程設(shè)計任務說明書。設(shè)計工作計劃與進度安排1.知識準備,整體思路設(shè)計 2小時2.開發(fā)環(huán)境與程序調(diào)試環(huán)境 4小時3.無連接的多路復用和解復用的模擬程序的設(shè)計與實現(xiàn); 12小時4.面向連接的多路復用和解復用的模擬程序的設(shè)計與實現(xiàn); 12小時5.課程設(shè)計說明書 10小時設(shè)計考核要求1.出勤 202.答辯或演示303.課程設(shè)計說明書 50指導教師(簽字): 教研室主任(簽字):傳輸層中多路復用與解復用模擬程序的實現(xiàn)(Java或C+)一、問題描述設(shè)計要求:1. 能夠處理應用層中常用的幾種應用,自己創(chuàng)建進程表示

4、HTTP、FTP等至少兩種應用。2. 構(gòu)造所需的報文段數(shù)據(jù)。3. 能夠?qū)崿F(xiàn)無連接的多路復用和解復用的模擬程序,通過socket處理,在服務器端能夠顯示客戶端請求的是何種應用。4. 能夠?qū)崿F(xiàn)面向連接的多路復用和解復用的模擬程序。二、基本要求1. .熟悉多路復用與解復用的實現(xiàn)原理;2. 熟悉TCP/UDP報文相關(guān)結(jié)構(gòu);3. TCP/UDP報文的構(gòu)造;4. 無連接的多路復用和解復用的模擬程序的設(shè)計與實現(xiàn);5. 面向連接的多路復用和解復用的模擬程序的設(shè)計與實現(xiàn);三、設(shè)計思想使用套接字管道通信模塊實現(xiàn)進程間的多道復用。主要有下面幾種方法: 1)pipe, 創(chuàng)建一個管道,返回2個管道描述符.通常用于父子進

5、程之間通訊。2)popen, pclose: 這種方式只返回一個管道描述符,常用于通信另一方是stdin or stdout; 3)mkpipe: 命名管道, 在許多進程之間進行交互。同時要應用到Java I/O 里面的Selector便成來實現(xiàn)。四、系統(tǒng)結(jié)構(gòu)傳輸層的多路復用與解復用的模擬程序?qū)崿F(xiàn)用到了C/S 及客戶端與服務器模式:SelectorSocket 與 SelectorClient :Selector相當于一個服用總線,負責統(tǒng)一各個處理程序的消息注冊,統(tǒng)一接收客戶端或服務器消息信息,再分發(fā)給不同的事件處理程序進行處理。整個流程就一個注冊-接收-處理的過程,這樣就模擬實現(xiàn)了多路復用與

6、解復用,能夠把相應的數(shù)據(jù)分發(fā)的對應的應用程序:首先應用服務器端,即SelectorSocket.java ,同一個個程序的消息注冊,統(tǒng)一接收客戶端或服務器消息信息,再分發(fā)給不同的事件處理程序進行處理;然后運行客戶端,即SelectorClient.java ,運行此程序負責連接服務器,并向其發(fā)送一定的數(shù)據(jù),實現(xiàn)多路復用。五、模塊劃分1. java.io.BufferedReader;/將緩沖指定文件的輸入2. java.io.InputStreamReader;/字節(jié)轉(zhuǎn)換為字符的橋梁3. .InetAddress;/參數(shù)傳遞給流套接字類和自尋址套接字類構(gòu)造器或非構(gòu)造器方法4. .InetSoc

7、ketAddress;/根據(jù)IP 地址和端口號創(chuàng)建套接字地址5java.nio.ByteBuffer;/將此緩沖區(qū)與另一個緩沖區(qū)進行比較6. java.nio.channels.SelectionKey;/此鍵的通道是否已準備好接受新的套接字連接7java.nio.channels.Selector;/將NIO通道選綁定到擇器8java.nio.channels.SocketChannel;/打開套接字通道并將其連接到遠程地址六、源程序服務器端:import .InetAddress;/nio非堵塞應用通常適用用在I/O讀寫等方面import .InetSocketAddress;import

8、 java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;public class SelectorSocket private SocketChannel sc;private Selector select;private SelectionKey

9、 key;private ServerSocketChannel ssc;public SelectorSocket() public void run() throws Exception / 打開一個選擇器select = Selector.open();ssc = ServerSocketChannel.open();ssc.configureBlocking(false);/ 向select注冊key = ssc.register(select, SelectionKey.OP_ACCEPT);InetSocketAddress address = new InetSocketAddr

10、ess(InetAddress.getLocalHost(), 8888);ssc.socket().bind(address);while (true) / 選擇一個通道if (select.select() 0) Iterator iter = select.selectedKeys().iterator();while (iter.hasNext() key = iter.next();/ 一個key被處理完成后,就都被從就需隊列中除去iter.remove();/ 該通道可被處理System.out.println(一個新的請求!);if (key.isAcceptable() Sys

11、tem.out.println(連接!);/ 從ServerSocketChannel中取得我們剛剛注冊的SocketChannelsc = (ServerSocketChannel) key.channel().accept();sc.configureBlocking(false);key = sc.register(select, SelectionKey.OP_READ);System.out.println(有新的連接了,地址是:+ sc.socket().getInetAddress().getHostAddress();if (key.isReadable() sc = (Soc

12、ketChannel) key.channel();ByteBuffer bb = ByteBuffer.allocate(10);int count = sc.read(bb);if (count 0) bb.flip();System.out.println(Client+ new String(bb.array();sc.write(bb);System.out.println(Server+ new String(bb.array();bb.position(0);bb.limit(0); else sc.close();bb.clear();bb = null;public stat

13、ic void main(String args) SelectorSocket ss = new SelectorSocket();try ss.run(); catch (Exception e) e.printStackTrace(System.out);客戶端:import java.io.BufferedReader;/將緩沖指定文件的輸入import java.io.InputStreamReader;/字節(jié)轉(zhuǎn)換為字符的橋梁import .InetAddress;/參數(shù)傳遞給流套接字類和自尋址套接字類構(gòu)造器或非構(gòu)造器方法import .InetSocketAddress;/根據(jù)IP

14、 地址和端口號創(chuàng)建套接字地址import java.nio.ByteBuffer;/將此緩沖區(qū)與另一個緩沖區(qū)進行比較import java.nio.channels.SelectionKey;/此鍵的通道是否已準備好接受新的套接字連接import java.nio.channels.Selector;/將NIO通道選綁定到擇器import java.nio.channels.SocketChannel;/打開套接字通道并將其連接到遠程地址import java.util.Iterator;/迭代器public class SelectorClient private SocketChannel

15、 sc;private Selector select;private SelectionKey key;/nio非堵塞應用通常適用用在I/O讀寫等方面public SelectorClient() public void run() throws Exception select = Selector.open();sc = SocketChannel.open();sc.configureBlocking(false);key = sc.register(select, SelectionKey.OP_READ | SelectionKey.OP_WRITE);sc.connect(new

16、 InetSocketAddress(InetAddress.getLocalHost(), 8888);while (!sc.finishConnect() sc.write(ByteBuffer.wrap(hello.getBytes();while (true) if (select.select() 0) Iterator iter = select.selectedKeys().iterator();while (iter.hasNext() key = iter.next();if (key.isConnectable() System.out.println(連接上服務器!);i

17、f (key.isReadable() ByteBuffer bb = ByteBuffer.allocate(10);sc.read(bb);bb.flip();System.out.println(收到的是: + new String(bb.array();System.out.println(請輸入數(shù)據(jù):); String data = new BufferedReader(new InputStreamReader(System.in).readLine();sc.write(ByteBuffer.wrap(data.getBytes();System.out.println(發(fā)送的是

18、: + data);bb.clear();bb = null;public static void main(String args)throws ExceptionSelectorClient sc=new SelectorClient();sc.run();七、測試數(shù)據(jù)下面是服務器端程序運行時的截圖:服務器首先運行,即監(jiān)聽各個連接信道,當有數(shù)據(jù)連接數(shù),顯示連接主機的IP地址,并且發(fā)送Hello到請求的主機,情況顯示如下: 八、測試情況啟動客戶端程序,當程序啟動,想運行服務器的主機發(fā)送相應的數(shù)據(jù),服務器收到能夠并顯示,并且向請求的主機將其發(fā)送的數(shù)據(jù)返回給客戶端主機,現(xiàn)實情況如下:客戶程序:服

19、務器程序:結(jié) 論設(shè)計中遇到的問題(系統(tǒng)設(shè)計、定義模塊、調(diào)試等過程中所遇到的問題)及如何解決的,還存在的問題及可能的改進方法等等。1. 進程協(xié)同工作時,需要互相交換信息,有些情況下進程間交換的少量信息,有些情況下進程間交換大批數(shù)據(jù)。進程通信即為兩個并行進程可以通過互相發(fā)送消息進行合作,消息是通過消息緩沖而在進程之間相互傳遞的。 如進程同步是一種進程通信,通過修改信號量,進程之間可建立起聯(lián)系,相互協(xié)調(diào)運行和協(xié)同工作;2. java.nio 包定義了緩沖區(qū)類,這些類用于所有 NIO API。java.nio.charset 包中定義了字符集 API,java.nio.channels 包中定義了信道和選擇器 API。每個子包都具有自己的服務提供程序接口 (SPI) 子包,SPI 子包的內(nèi)容可用于擴展

溫馨提示

  • 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

提交評論