操作系統(tǒng)課程設(shè)計簡單的聊天程序_第1頁
操作系統(tǒng)課程設(shè)計簡單的聊天程序_第2頁
操作系統(tǒng)課程設(shè)計簡單的聊天程序_第3頁
操作系統(tǒng)課程設(shè)計簡單的聊天程序_第4頁
操作系統(tǒng)課程設(shè)計簡單的聊天程序_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 操作系統(tǒng)課程設(shè)計任務書 學 院計算機與信息工程學院專 業(yè)網(wǎng)絡(luò)工程課程名稱操作系統(tǒng)題 目進程通信完成期限2013年6月3日-2013年6月30日共4周內(nèi)容及任務1、 項目的目的實現(xiàn)一個簡單的聊天程序2、 項目任務的主要內(nèi)容和要求(1)根據(jù)進程通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩部分。(2)按照要求撰寫課程設(shè)計報告。三、項目設(shè)計(研究)思路分析課題要求、了解進程通信原理、設(shè)計通信界面、編寫代碼。四、具體成果形式和要求可以在一個計算機上通信,也可以在兩個計算機上通信。進度安排 起止日期工作內(nèi)容分析課題要求,找出解決方案根據(jù)方案了解通信原理,

2、對課題進行設(shè)計根據(jù)設(shè)計分析,進行代碼編寫和測試 主要參考資料1趙生慧. Java面向?qū)ο蟪绦蛟O(shè)計(第二版)M.北京:中國水利水電出版社,2010.2(美)卡爾弗特,多納霍,周恒民譯. Java TCPIP Socket編程(原書第2版)M.北京:機械工業(yè)出版社,2011.指導教師意見(簽字): 年 月 日系(教研室)主任意見(簽字): 年 月 日 操作系統(tǒng)課程設(shè)計說明書 學院名稱: 計算機與信息工程學院 班級名稱: 網(wǎng)絡(luò)工程113班 學生姓名: 柯焱芳 謝娟娟 劉瑤 靳夢婷 束道華 學 號: 2011211384 2011211419 2011211391 2011211383 2011211

3、404 題 目: 進程通信 指導教師 姓 名: 王匯彬 起止日期: 2013年6月3日-2013年6月30日 第一部分:正文部分一、選題背景為了提高計算機系統(tǒng)的效率。增強計算機系統(tǒng)內(nèi)各種硬件的并行操作能力。操作系統(tǒng)要求程序結(jié)構(gòu)必須適應并發(fā)處理的需要,為此引入了進程的概念。進程是操作系統(tǒng)的核心,所有基于多道程序設(shè)計的操作系統(tǒng)都建立在進程的概念之上。目前的計算機系統(tǒng)均提供了多任務并行環(huán)境。無論是應用程序還是系統(tǒng)程序,都需要針對每一個任務創(chuàng)建相應的進程。進程是設(shè)計和分析操作系統(tǒng)的有力工具。然而不同的進程之間,即使是具有家族聯(lián)系的父子進程,都具有各自不同的進程映像。由于不同的進程運行在各自不同的內(nèi)存空

4、間中,一方對于變量的修改另一方是無法感知的。因此,進程之間的信息傳遞不可能通過變量或其它數(shù)據(jù)結(jié)構(gòu)直接進行,只能通過進程間通信來完成。要實現(xiàn)實現(xiàn)進程通信有多種方法,在課程設(shè)計中,使用Socket通信方式進行通信,實現(xiàn)兩臺計算機之間的進程通信。 二、設(shè)計理念課程設(shè)計要求根據(jù)進程通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩部分。首先要滿足在同一個計算機上可以進行通信,在這個基礎(chǔ)上可以實現(xiàn)一對一兩臺計算機之間的通信。2.1整體設(shè)計需求分析根據(jù)課題要求:根據(jù)進程通信的方式和類型,以及進程通信的實現(xiàn)方法,實現(xiàn)一個簡單的聊天程序,聊天程序包括客戶端與服務器兩

5、部分。要選擇合適的通信方式能夠使客戶端和器端斷建立連接,聊天就需要有聊天界面,使用戶可以通過界面進行通信。2.2服務器端需求分析服務器端需要建立一個端口提供給客戶端監(jiān)聽,在建立端口后不斷進行監(jiān)聽是否有客戶端連接或者斷開連接,若有客戶端監(jiān)聽其端口,便建立連接進行通信。要使用Java設(shè)計編程實現(xiàn)聊天界面,當有客戶端進行連接之后,顯示是哪一臺計算機與服務器端進行連接通信。2.3客戶端需求分析客戶端應該完成的工作包括: 與服務器端建立通信通道,向服務器端發(fā)送信息。 接收來自服務器的信息。2.4聊天界面需求分析聊天界面首先顯示是服務器端還是客戶端,聊天界面中要有輸入文本域,在文本域中可以顯示當前輸入端聊

6、天內(nèi)容,在文本域下端有文本框,可以顯示服務器與客戶只見到聊天記錄。三、過程論述3.1進程通信方式及Socket通信原理進程通信的方進程通信的管道、消息、Socket 、共享內(nèi)存、文件、信號等。本次課程設(shè)計使用的Socket通信方式。Socket用于在兩個基于TCP/IP協(xié)議的應用程序之間相互通信。最早出現(xiàn)在UNIX系統(tǒng)中,是UNIX系統(tǒng)主要的信息傳遞方式。在Windows系統(tǒng)中,Socket稱為winsock。其有兩個基本概念:客戶端和服務端。當兩個應用之間需要采用Socket通信時,首先需要在兩個應用之間(可能位于同一臺機器,也可能位于不同的機器)建立Socket連接,發(fā)起呼叫連接請求的一方

7、為客戶端,接受呼叫連接請求的一方成為服務端??蛻舳撕头斩耸窍鄬Φ模粋€應用可以是客戶端,也可以是服務端。在客戶端呼叫連接請求之前,它必須知道服務端在哪里。所以需要知道服務端所在機器的IP地址或機器名稱,如果客戶端和服務端事前有一個約定就好了,這個約定就是PORT(端口號)。也就是說,客戶端可以通過服務端所在機器的IP地址或機器名稱和端口號唯一的確定方式來呼叫服務端。在客戶端呼叫之前,服務端必須處于偵聽狀態(tài),偵聽是否有客戶要求建立連接。一旦接到連接請求,服務端可以根據(jù)情況建立或拒絕連接。連接方式有兩種,同步方式(Blocking)和(noBlocking).客戶端發(fā)送的消息可以是文本,也可以

8、是二進制信息流。當客戶方的消息到達服務方端口時,會自動觸發(fā)一個事件(event),服務端只要接管該事件,就可以接受來自客戶端的消息了。3.2 Socket通信流程Socket通信首先在服務器端產(chǎn)生server Socket(同時客戶端產(chǎn)生Socket),等待客戶端連接服務器端端口號,若進行連接之后,客戶端與服務器端便可進行聊天,形成數(shù)據(jù)流讀在緩沖區(qū)形成數(shù)組,最終顯示在文本域中,當客戶端與服務器端斷開連接之后,立即退出,服務器端繼續(xù)監(jiān)、等待。圖3-1 Socket通信活動圖3.3 服務器端設(shè)計由需求分析可知,在服務器端進行程序設(shè)計時,首先要實現(xiàn)服務器端設(shè)置socket,允許客戶端訪問,在編程設(shè)計

9、時要實現(xiàn)圖形化界面設(shè)計 設(shè)置socket語句ServerSocket server;/生成服務器套接字server = new ServerSocket(5000);/實例化套接字端口為5000 client = server.accept();/等待客戶機連接ta.append("客戶機是" + client.getInetAddress().getHostName() + "nn") /獲得本機地址/獲得指定的IP地址ta.append("客戶機是:" +"192.168.97. 85 "+"nn&q

10、uot;);/獲得請求連接服務器的客戶機的IP地址ta.append("客戶機是:" +" "+"nn"); 服務器端程序設(shè)計Label label=new Label("交談內(nèi)容");TextField tf= new TextField(20);/實例化文本框TextArea ta=new TextArea( );/實例化文本域Panel panel=new Panel( );/創(chuàng)建面板對象ServerSocket server;/創(chuàng)建服務器套接字Socket Client;/創(chuàng)建客戶機套接字InputStre

11、am DataIn;/定義輸入流OutputStream DataOut;/定義輸出流public Server( ) super("服務器"); setSize(300,180);/設(shè)置窗體大小 panel.add(label);/在面板上添加標簽 panel.add(tf);/在面板上添加文本框 tf.addActionListener(this);/注冊 add("North",panel);/在窗體上添加面板 add("Center",ta);/在窗體上添加文本區(qū) addWindowListener(new WindowAda

12、pter( ) public void windowClosing(WindowEvent e) System.exit(0);); show( ); /可以提示 try server =new ServerSocket(5000); Client=server.accept( );/等待客戶機連接ServerSocket(5000); /獲得指定的IP地址 /ta.append("客戶機是:" +"192.168.97. 85 "+"nn"); /獲得請求連接服務器的地址 ta.append("客戶機是:" +&

13、quot; "+"nn"); DataIn=Client.getInputStream( );/實例化輸入流 DataOut=Client.getOutputStream( );/實例化輸出流 catch(IOException ioe) /捕獲異常 while(true) try byte buff =new byte512;/緩沖數(shù)組 DataIn.read(buff);/讀出數(shù)組數(shù)據(jù) String str=new String(buff);/接受客戶端發(fā)送的數(shù)據(jù)包 ta.append("客戶機說:"+str+"n");

14、 catch(IOException ioe) public static void main(String args ) new Server( );/實例化Sever對象 public void actionPerformed(ActionEvent e)/事件監(jiān)聽處理程序 try String str=new String(tf.getText();/實例化字符串 byte buf =str.getBytes( );/讀出數(shù)組 tf.setText(" "); DataOut.write(buf); ta.append("服務器說:"+str+&q

15、uot;n"); catch(IOException ioe) 3.4客戶端設(shè)計 由需求分析可知,在客戶端進行程序設(shè)計時,首先要實現(xiàn)客戶端設(shè)置socket,輸入客戶端IP地址,請求連接,在編程設(shè)計時要實現(xiàn)圖形化界面設(shè)計。 設(shè)置socket語句Socket client;/生成客戶端套接字client = new Socket("192.168.97.85",4000);/實例化客戶端 客戶端程序設(shè)計Label label=new Label("交談內(nèi)容");TextField tf= new TextField(20);/實例化文本框TextA

16、rea ta=new TextArea( );/實例化文本域Panel panel=new Panel( );/創(chuàng)建面板對象ServerSocket server;/創(chuàng)建服務器套接字Socket Client;/創(chuàng)建客戶機套接字InputStream DataIn;/定義輸入流OutputStream DataOut;/定義輸出流public Client( ) super("客戶機"); setSize(300,180); panel.add(label);/在面板上添加標簽 panel.add(tf);/在面板上添加文本框 tf.addActionListener(th

17、is);/注冊 add("North",panel);/在窗體上添加面板 add("Center",ta);/在窗體上添加文本區(qū) addWindowListener(new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0);); show( ); try Client=new Socket(InetAddress.getLocalHost( ),5000); ta.append(Client.getInetAddress( ).getHostName( )+&

18、quot;nn"); /ta.append("客戶機是:" +"192.168.97.84"+"nn"); DataIn=Client.getInputStream( );/實例化輸入流 DataOut=Client.getOutputStream( );/實例化輸出流 catch(IOException ioe) while(true) try byte buff =new byte512;/緩沖數(shù)組 DataIn.read(buff);/讀出數(shù)組數(shù)據(jù) String str=new String(buff);/接受客戶端發(fā)

19、送的數(shù)據(jù)包 ta.append("服務器說:"+str+"n"); catch(IOException ioe) public static void main(String args ) new Client( ); public void actionPerformed(ActionEvent e)/事件處理程序 try String str=new String(tf.getText();/實例化字符串 byte buf =str.getBytes( );/字符串轉(zhuǎn)換為數(shù)組存儲 tf.setText(" "); DataOut.

20、write(buf);/在客戶機中寫出輸出流里的數(shù)組 ta.append("客戶機說:"+str+"n");/寫入文本域 catch(IOException ioe) /捕獲異常四、結(jié)果分析本設(shè)計通過套接字來實現(xiàn)進程間的通信。在TCP/IP網(wǎng)絡(luò)應用中,通信的兩個進程間相互作用的主要模式是客戶機/服務器模式,即客戶向服務器發(fā)出服務請求,服務器收到請求后,提供相應的服務。由此原理,便可實現(xiàn)進程通信功能。其中,在進程通信前,只有設(shè)置好所要進行通信的IP地址,并且要保證在服務器成功運行之后,再運行客戶機,才可進行正常通信。4.1未通信時狀態(tài)只運行服務器程序模塊或

21、者客戶端程序模塊時,由于服務器并未與任何客戶機之間建立聯(lián)系,故無法完成通信(如圖4-1)。 圖 4-1未連接時狀態(tài)圖4.2 單機測試當服務器端和客戶端在同一臺計算機上運行時,socket分別得到的都是本機IP地址,也可以進行通信(如圖4-2)。 圖 4-2單機通信狀態(tài)圖4.3 兩臺計算機間通信測試當服務器端和客戶端在不同的兩臺計算機上運行時,先給定客戶端服務器的IP地址,但服務器端運行后,在運行客戶端便可以進行通信(如圖4-3,圖4-4)。 圖 4-3 兩臺計算機通信服務器端狀態(tài)圖圖 4-4 兩臺計算機通信服務器端狀態(tài)圖4.4錯誤操作在運行程序時,若先運行客戶端,則無法進行通信(如圖4-5)。 圖4-5 運行出錯時狀態(tài)圖4.5 分析客戶機請求連接

溫馨提示

  • 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

提交評論