

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 操作系統(tǒng)課程設計任務書</p><p> 學 院計算機與信息工程學院專 業(yè)網(wǎng)絡工程</p><p> 課程名稱操作系統(tǒng)題 目進程通信</p><p> 完成期限2013年6月3日-2013年6月30日共4周</p><p> 內(nèi)容及任務項目的目的實現(xiàn)一個簡單的聊天程序項目任務的主要內(nèi)容和要求(1)根據(jù)進程
2、通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩部分。(2)按照要求撰寫課程設計報告。三、項目設計(研究)思路分析課題要求、了解進程通信原理、設計通信界面、編寫代碼。四、具體成果形式和要求可以在一個計算機上通信,也可以在兩個計算機上通信。</p><p> 進度安排起止日期工作內(nèi)容</p><p> 2013.6.3-2013.6.5分析課題要
3、求,找出解決方案</p><p> 2013.6.6-2013.6.25根據(jù)方案了解通信原理,對課題進行設計</p><p> 2013.6.25-2013.6.30根據(jù)設計分析,進行代碼編寫和測試</p><p> 主要參考資料[1]趙生慧. Java面向對象程序設計(第二版)[M].北京:中國水利水電出版社,2010.[2](美)卡爾弗特,多納霍,周恒民譯. J
4、ava TCP\IP Socket編程(原書第2版)[M].北京:機械工業(yè)出版社,2011.</p><p> 指導教師意見(簽字): 年 月 日</p><p> 系(教研室)主任意見(簽字): 年 月 日</p><p>
5、;<b> 第一部分:正文部分</b></p><p><b> 一、選題背景</b></p><p> 為了提高計算機系統(tǒng)的效率。增強計算機系統(tǒng)內(nèi)各種硬件的并行操作能力。操作系統(tǒng)要求程序結構必須適應并發(fā)處理的需要,為此引入了進程的概念。進程是操作系統(tǒng)的核心,所有基于多道程序設計的操作系統(tǒng)都建立在進程的概念之上。目前的計算機系統(tǒng)均提供了多任
6、務并行環(huán)境。無論是應用程序還是系統(tǒng)程序,都需要針對每一個任務創(chuàng)建相應的進程。進程是設計和分析操作系統(tǒng)的有力工具。然而不同的進程之間,即使是具有家族聯(lián)系的父子進程,都具有各自不同的進程映像。由于不同的進程運行在各自不同的內(nèi)存空間中,一方對于變量的修改另一方是無法感知的。因此,進程之間的信息傳遞不可能通過變量或其它數(shù)據(jù)結構直接進行,只能通過進程間通信來完成。要實現(xiàn)實現(xiàn)進程通信有多種方法,在課程設計中,使用Socket通信方式進行通信,實現(xiàn)兩
7、臺計算機之間的進程通信。 </p><p><b> 二、設計理念</b></p><p> 課程設計要求根據(jù)進程通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩部分。首先要滿足在同一個計算機上可以進行通信,在這個基礎上可以實現(xiàn)一對一兩臺計算機之間的通信。</p><p> 2.1整體設計需求
8、分析</p><p> 根據(jù)課題要求:根據(jù)進程通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩部分。</p><p> 要選擇合適的通信方式能夠使客戶端和器端斷建立連接,聊天就需要有聊天界面,使用戶可以通過界面進行通信。</p><p> 2.2服務器端需求分析</p><p> 服務器端
9、需要建立一個端口提供給客戶端監(jiān)聽,在建立端口后不斷進行監(jiān)聽是否有客戶端連接或者斷開連接,若有客戶端監(jiān)聽其端口,便建立連接進行通信。要使用Java設計編程實現(xiàn)聊天界面,當有客戶端進行連接之后,顯示是哪一臺計算機與服務器端進行連接通信。</p><p> 2.3客戶端需求分析</p><p> 客戶端應該完成的工作包括:</p><p> ⑴ 與服務器端建立通信通
10、道,向服務器端發(fā)送信息。</p><p> ⑵ 接收來自服務器的信息。</p><p> 2.4聊天界面需求分析</p><p> 聊天界面首先顯示是服務器端還是客戶端,聊天界面中要有輸入文本域,在文本域中可以顯示當前輸入端聊天內(nèi)容,在文本域下端有文本框,可以顯示服務器與客戶只見到聊天記錄。</p><p><b> 三、過
11、程論述</b></p><p> 3.1進程通信方式及Socket通信原理</p><p> 進程通信的方進程通信的管道、消息、Socket 、共享內(nèi)存、文件、信號等。本次課程設計使用的Socket通信方式。</p><p> Socket用于在兩個基于TCP/IP協(xié)議的應用程序之間相互通信。最早出現(xiàn)在UNIX系統(tǒng)中,是UNIX系統(tǒng)主要的信息傳遞方
12、式。在Windows系統(tǒng)中,Socket稱為winsock。其有兩個基本概念:客戶端和服務端。當兩個應用之間需要采用Socket通信時,首先需要在兩個應用之間(可能位于同一臺機器,也可能位于不同的機器)建立Socket連接,發(fā)起呼叫連接請求的一方為客戶端,接受呼叫連接請求的一方成為服務端??蛻舳撕头斩耸窍鄬Φ模粋€應用可以是客戶端,也可以是服務端。在客戶端呼叫連接請求之前,它必須知道服務端在哪里。所以需要知道服務端所在機器的IP地址
13、或機器名稱,如果客戶端和服務端事前有一個約定就好了,這個約定就是PORT(端口號)。也就是說,客戶端可以通過服務端所在機器的IP地址或機器名稱和端口號唯一的確定方式來呼叫服務端。在客戶端呼叫之前,服務端必須處于偵聽狀態(tài),偵聽是否有客戶要求建立連接。一旦接到連接請求,服務端可以根據(jù)情況建立或拒絕連接。連接方式有兩種,同步方式(Blocking)和(noBlocking).</p><p> 客戶端發(fā)送的消息可以是
14、文本,也可以是二進制信息流。當客戶方的消息到達服務方端口時,會自動觸發(fā)一個事件(event),服務端只要接管該事件,就可以接受來自客戶端的消息了。</p><p> 3.2 Socket通信流程</p><p> Socket通信首先在服務器端產(chǎn)生server Socket(同時客戶端產(chǎn)生Socket),等待客戶端連接服務器端端口號,若進行連接之后,客戶端與服務器端便可進行聊天,形成數(shù)
15、據(jù)流讀在緩沖區(qū)形成數(shù)組,最終顯示在文本域中,當客戶端與服務器端斷開連接之后,立即退出,服務器端繼續(xù)監(jiān)、等待。</p><p> 圖3-1 Socket通信活動圖</p><p> 3.3 服務器端設計</p><p> 由需求分析可知,在服務器端進行程序設計時,首先要實現(xiàn)服務器端設置socket,允許客戶端訪問,在編程設計時要實現(xiàn)圖形化界面設計</p&g
16、t;<p> ⑴ 設置socket語句</p><p> ServerSocket server;//生成服務器套接字</p><p> server = new ServerSocket(5000);//實例化套接字端口為5000 </p><p> client = server.accept();//等待客戶機連接</p>
17、<p> ta.append("客戶機是" + client.getInetAddress().getHostName() + "\n\n") //獲得本機地址</p><p> //獲得指定的IP地址</p><p> ta.append("客戶機是:" +"192.168.97. 8
18、5 "+"\n\n");</p><p> //獲得請求連接服務器的客戶機的IP地址</p><p> ta.append("客戶機是:" +" "+"\n\n");</p><p> ?、?服務器端程序設計</p><p> L
19、abel label=new Label("交談內(nèi)容");</p><p> TextField tf= new TextField(20);//實例化文本框</p><p> TextArea ta=new TextArea( );//實例化文本域</p><p> Panel panel=new Panel( );//創(chuàng)建面板對象<
20、;/p><p> ServerSocket server;//創(chuàng)建服務器套接字</p><p> Socket Client;//創(chuàng)建客戶機套接字</p><p> InputStream DataIn;//定義輸入流</p><p> OutputStream DataOut;//定義輸出流</p><p>
21、public Server( )</p><p> { super("服務器");</p><p> setSize(300,180);//設置窗體大小</p><p> panel.add(label);//在面板上添加標簽</p><p> panel.add(tf);//在面板上添加文本框</p&g
22、t;<p> tf.addActionListener(this);//注冊</p><p> add("North",panel);//在窗體上添加面板</p><p> add("Center",ta);//在窗體上添加文本區(qū)</p><p> addWindowListener(new Window
23、Adapter( )</p><p> { public void windowClosing(WindowEvent e)</p><p> { System.exit(0);}});</p><p> show( ); //可以提示</p><p><b> try</b></p><
24、;p> { server =new ServerSocket(5000);</p><p> Client=server.accept( );//等待客戶機連接ServerSocket(5000);</p><p> //獲得指定的IP地址</p><p> //ta.append("客戶機是:" +"192.168.97
25、. 85 "+"\n\n");</p><p> //獲得請求連接服務器的地址</p><p> ta.append("客戶機是:" +" "+"\n\n");</p><p> DataIn=Client.getInputStream( );//實例化
26、輸入流</p><p> DataOut=Client.getOutputStream( );//實例化輸出流</p><p><b> }</b></p><p> catch(IOException ioe){ }//捕獲異常</p><p> while(true)</p><p>
27、<b> {</b></p><p><b> try{</b></p><p> byte buff[ ]=new byte[512];//緩沖數(shù)組</p><p> DataIn.read(buff);//讀出數(shù)組數(shù)據(jù)</p><p> String str=new String(bu
28、ff);//接受客戶端發(fā)送的數(shù)據(jù)包</p><p> ta.append("客戶機說:"+str+"\n");</p><p><b> }</b></p><p> catch(IOException ioe){ }</p><p><b> }</b&g
29、t;</p><p><b> }</b></p><p> public static void main(String args[ ])</p><p><b> {</b></p><p> new Server( );//實例化Sever對象</p><p>
30、<b> }</b></p><p> public void actionPerformed(ActionEvent e)//事件監(jiān)聽處理程序</p><p><b> {</b></p><p><b> try</b></p><p><b> { &
31、lt;/b></p><p> String str=new String(tf.getText());//實例化字符串</p><p> byte buf[ ]=str.getBytes( );//讀出數(shù)組</p><p> tf.setText(" ");</p><p> DataOut.write(b
32、uf);</p><p> ta.append("服務器說:"+str+"\n");</p><p><b> }</b></p><p> catch(IOException ioe){ } </p><p><b> }</b></p>
33、<p><b> 3.4客戶端設計</b></p><p> 由需求分析可知,在客戶端進行程序設計時,首先要實現(xiàn)客戶端設置socket,輸入客戶端IP地址,請求連接,在編程設計時要實現(xiàn)圖形化界面設計。</p><p> ?、?設置socket語句</p><p> Socket client;//生成客戶端套接字</p
34、><p> client = new Socket("192.168.97.85",4000);//實例化客戶端</p><p><b> ?、?客戶端程序設計</b></p><p> Label label=new Label("交談內(nèi)容");</p><p> TextFi
35、eld tf= new TextField(20);//實例化文本框</p><p> TextArea ta=new TextArea( );//實例化文本域</p><p> Panel panel=new Panel( );//創(chuàng)建面板對象</p><p> ServerSocket server;//創(chuàng)建服務器套接字</p><p&
36、gt; Socket Client;//創(chuàng)建客戶機套接字</p><p> InputStream DataIn;//定義輸入流</p><p> OutputStream DataOut;//定義輸出流</p><p> public Client( )</p><p> { super("客戶機");<
37、/p><p> setSize(300,180);</p><p> panel.add(label);//在面板上添加標簽</p><p> panel.add(tf);//在面板上添加文本框</p><p> tf.addActionListener(this);//注冊</p><p> add("
38、;North",panel);//在窗體上添加面板</p><p> add("Center",ta);//在窗體上添加文本區(qū)</p><p> addWindowListener(new WindowAdapter( )</p><p> { public void windowClosing(WindowEvent e)<
39、;/p><p> { System.exit(0);}});</p><p><b> show( );</b></p><p><b> try</b></p><p> { Client=new Socket(InetAddress.getLocalHost( ),5000);</p&
40、gt;<p> ta.append(Client.getInetAddress( ).getHostName( )+"\n\n"); </p><p> //ta.append("客戶機是:" +"192.168.97.84"+"\n\n"); </p><p> DataIn=Cl
41、ient.getInputStream( );//實例化輸入流</p><p> DataOut=Client.getOutputStream( );//實例化輸出流</p><p><b> }</b></p><p> catch(IOException ioe){ }</p><p> while(true
42、)</p><p><b> {</b></p><p><b> try{</b></p><p> byte buff[ ]=new byte[512];//緩沖數(shù)組</p><p> DataIn.read(buff);//讀出數(shù)組數(shù)據(jù)</p><p> St
43、ring str=new String(buff);//接受客戶端發(fā)送的數(shù)據(jù)包</p><p> ta.append("服務器說:"+str+"\n");</p><p><b> }</b></p><p> catch(IOException ioe){ }</p><p&g
44、t;<b> }</b></p><p><b> }</b></p><p> public static void main(String args[ ])</p><p><b> {</b></p><p> new Client( );</p>
45、<p><b> }</b></p><p> public void actionPerformed(ActionEvent e)//事件處理程序</p><p><b> {</b></p><p><b> try</b></p><p><b&
46、gt; {</b></p><p> String str=new String(tf.getText());//實例化字符串</p><p> byte buf[ ]=str.getBytes( );//字符串轉換為數(shù)組存儲</p><p> tf.setText(" ");</p><p> Da
47、taOut.write(buf);//在客戶機中寫出輸出流里的數(shù)組</p><p> ta.append("客戶機說:"+str+"\n");//寫入文本域</p><p><b> }</b></p><p> catch(IOException ioe){ } //捕獲異常</p>
48、<p><b> 四、結果分析</b></p><p> 本設計通過套接字來實現(xiàn)進程間的通信。在TCP/IP網(wǎng)絡應用中,通信的兩個進程間相互作用的主要模式是客戶機/服務器模式,即客戶向服務器發(fā)出服務請求,服務器收到請求后,提供相應的服務。由此原理,便可實現(xiàn)進程通信功能。其中,在進程通信前,只有設置好所要進行通信的IP地址,并且要保證在服務器成功運行之后,再運行客戶機,才可進行
49、正常通信。</p><p><b> 4.1未通信時狀態(tài)</b></p><p> 只運行服務器程序模塊或者客戶端程序模塊時,由于服務器并未與任何客戶機之間建立聯(lián)系,故無法完成通信(如圖4-1)。</p><p> 圖 4-1未連接時狀態(tài)圖</p><p><b> 4.2 單機測試</b>
50、</p><p> 當服務器端和客戶端在同一臺計算機上運行時,socket分別得到的都是本機IP地址,也可以進行通信(如圖4-2)。</p><p> 圖 4-2單機通信狀態(tài)圖</p><p> 4.3 兩臺計算機間通信測試</p><p> 當服務器端和客戶端在不同的兩臺計算機上運行時,先給定客戶端服務器的IP地址,但服務器端運行后
51、,在運行客戶端便可以進行通信(如圖4-3,圖4-4)。</p><p> 圖 4-3 兩臺計算機通信服務器端狀態(tài)圖</p><p> 圖 4-4 兩臺計算機通信服務器端狀態(tài)圖</p><p><b> 4.4錯誤操作</b></p><p> 在運行程序時,若先運行客戶端,則無法進行通信(如圖4-5)。</
52、p><p> 圖4-5 運行出錯時狀態(tài)圖</p><p><b> 4.5 分析</b></p><p> 客戶機請求連接服務器,必須在服務器端建立套接字之后。對于4.3的錯誤操作,會使通信無法進行。在正常運行時無特殊要求,在客戶機退出程序之后,其他計算機要想與服務器鏈接,必須先退出服務器,再重新登錄之后才能連接。</p>&l
53、t;p><b> 五、結論</b></p><p> 通過連續(xù)四周的課程設計,完成了設計要求進程通信。在設計過程中,通過小組的共同努力,對進程通信的學習和摸索,設計出簡單的兩臺計算機之間的聊天。在整個設計過程中,由于對于socket的不了解,遇到了一些小小的問題,我們通過不斷摸索與嘗試,學會了很多知識。在課程設計過程中,認識到自己學習上的不足,在日常生活中還需增強自身的實際操作能力
54、,把理論運用到實踐中;在設計過程中,隊員之間相互合作,使我們認識了合作是必要性與重要性。伴隨著課程設計的結束,我們鍛煉了自身的能力,也收獲到了實現(xiàn)設計功能的喜悅。</p><p> 對于本組設計的結果,還有很對不足。例如,要進行聊天首先客戶端必須知道服務器端的IP地址,還不能進行多對多通信,這是我們知識量不足,能力有限,設計的時間太短,也無法在短時間內(nèi)學習其他知識來補充不足。通過課程設計,知道在哪些知識點上比較
55、薄弱,在以后的時間里,可以自己去學習相關知識加強自身能力。</p><p> 在課程設計過程中,遇到不懂的和不會的,老師給了我們很多幫助,真心的感謝老師。</p><p><b> 第二部分:參考文獻</b></p><p> [1]趙生慧. Java面向對象程序設計(第二版)[M].北京:中國水利水電出版社,2010.</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計--簡單的聊天程序
- java課程設計--簡單的網(wǎng)絡聊天程序
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)程序設計課程設計報告-操作系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)程序調(diào)度課程設計報告
- 操作系統(tǒng)課程設計-- 操作系統(tǒng)
- 操作系統(tǒng)課程設計簡單文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計--簡單文件系統(tǒng)的實現(xiàn)
- 計算機操作系統(tǒng)課程設計報告---win32sdk下聊天程序
- 課程設計一個簡單的網(wǎng)絡聊天程序
- 操作系統(tǒng)課程設計--進程調(diào)度程序設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--模擬操作系統(tǒng)的實現(xiàn)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--簡單二級文件系統(tǒng)
評論
0/150
提交評論