版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 網(wǎng)絡(luò)編程技術(shù)課程設(shè)計論文2012 2013學(xué)年第二學(xué)期題 目: UDP聊天程序 專業(yè)班級: 網(wǎng)絡(luò)10-5班 學(xué) 號: 311009040504 姓 名: 王亞歌 指導(dǎo)老師: 張 俊 日 期: 2013-6-25 目 錄一、引言22、 基礎(chǔ)理論21、 UDP協(xié)議簡介22、 系統(tǒng)需求分析3三、功能設(shè)計4 1、設(shè)計目的42、設(shè)計要求44、 系統(tǒng)實現(xiàn)5 1、原理概述52、程序設(shè)計流程5五、 設(shè)計過程6 1、程序設(shè)計流程及源代碼6源代碼6主機(jī)A6主機(jī)B102、 調(diào)試分析過程描述15 3、結(jié)果分析15六、結(jié)論16參考文獻(xiàn)16一、 引言 隨著計算機(jī)科學(xué)和 Internet 的飛速發(fā)展,網(wǎng)上聊天室已成為人們
2、相 互交流的一種方式,與 Email 電話相比,聊天服務(wù)更具有實時性和 有效性。本課題是 java基于UDP協(xié)議的聊天程序。聊天室分為客戶 端和服務(wù)器端,服務(wù)器端程序主要用來負(fù)責(zé)偵聽客戶發(fā)來的消息,客 戶端需要等服務(wù)器登錄成功以后檢測到服務(wù)器存在的情【關(guān)鍵詞】UDP 協(xié)議;網(wǎng)絡(luò)聊天室;.Windows Socket 網(wǎng)絡(luò)編程二、基礎(chǔ)理論1、UDP協(xié)議簡介 Windows Socket 網(wǎng)絡(luò)編程簡介 Windows Sockets 規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡單的 API,使應(yīng)用程序開 發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫函數(shù)調(diào)用和相關(guān)語義?,F(xiàn)在的 Windows Sock
3、ets 已經(jīng)基本上實現(xiàn)了與協(xié)議無關(guān),你可以使用 Windows Sockets 來調(diào)用多種 協(xié)議的功能,但較常使用的是 TCP/IP 協(xié)議。 Socket 實際在計算機(jī)中提供了一個通信端口, 可以通過這個端口與任何一個具有 Socket 接口的計算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接 收的信息都通過這個 Socket 接口來實現(xiàn)。微軟為 VC 定義了 Windows Sockets 類如CAsyncSocket 類和派生于 CAsyncSocket 的 CSocket 類,它們簡單易用。 根據(jù)傳輸數(shù)據(jù)類型的不同,Socket 主要分為三類:1)流式 Socket(SOCKSTREAM),在 這種方
4、式下,兩個通訊的應(yīng)用程序之聞要先建立一種虛擬的連接,提供可靠的、面向連接的 通 信 流 , 它 使 用 ”TCP” 協(xié) 議 。 從 而保證了數(shù)據(jù)傳 輸 的 正 確 性 和 順 序 的 。 2) 數(shù) 據(jù) 報 Socket(SOCKDGRAM),它使用數(shù)據(jù)報協(xié)議 UDP,定義了一種無連接的服務(wù),數(shù)據(jù)通過相互 獨(dú)立的報文進(jìn)行傳輸,是無序的,并且不保證可靠、無差錯。3)原始 Socket,原始套接字 允許對底層協(xié)議如 IP 或 ICMP 直接訪問, 它功能強(qiáng)大但使用較為不便, 主要用于一些協(xié)議的開發(fā)。 UDP 協(xié)議簡介 UDP 協(xié)議是一個面向無連接的協(xié)議。其連接的建立不必像 TCP 那樣需要服務(wù)器端偵
5、聽, 也不需要有客戶機(jī)請求連接, 屬于一種“強(qiáng)制”性的網(wǎng)絡(luò)連接。 提供一對一或一對多的、 UDP 無連接的數(shù)據(jù)報服務(wù)。該服務(wù)對消息中傳輸?shù)臄?shù)據(jù)提供不可靠的、最大努力的傳送,這意味 著它不保證數(shù)據(jù)的到達(dá),也不保證所傳送的數(shù)據(jù)報的順序是否正確,UDP 不重新傳輸丟失的 數(shù)據(jù)。其主要工作是:將應(yīng)用程序傳輸過來的數(shù)據(jù)分塊交給網(wǎng)絡(luò)層,確認(rèn)接受到分組信息。 盡管 UDP 無法像 TCP 一樣提供可靠的數(shù)據(jù)傳輸,但 UDP 并不比 TCP 缺乏優(yōu)越性。UDP 在傳輸 效率方面比 TCP 要高一些, 而且許多應(yīng)用程序并不需要保證嚴(yán)格的傳輸可靠性, 比如視頻會 議系統(tǒng)等,需要實時的交互,但并不要求音頻視頻的絕對
6、正確。 UDP 優(yōu)缺點(diǎn): 1UDP 不要求保持一個連接; 2UDP 沒有因接收方認(rèn)可收到數(shù)據(jù)包(或者當(dāng)數(shù)據(jù)包沒有正確抵達(dá)而自動重傳)而帶 來的開銷; 3設(shè)計 UDP 的目的是用于短應(yīng)用和控制消息; 4在一個數(shù)據(jù)包連接一個數(shù)據(jù)包的基礎(chǔ)上,UDP 要求的網(wǎng)絡(luò)帶寬比 TCP 更小。2、系統(tǒng)需求分析 (一) 客戶需求分析 分析客戶的需求,這里只列出比較核心的部分。 (1) 只限于局域網(wǎng)內(nèi)聊天。 (2) 簡易的操作界面。 。 (3) 可以同時與多個人聊天。 (4) 可以保存聊天記錄。 (二)性能需求分析 (1)可靠性高,能在由于系統(tǒng)問題或其它原因產(chǎn)生錯誤后,作出相對應(yīng)處理,比如網(wǎng)絡(luò) 初始化失敗、服務(wù)器不
7、在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯誤以后, 可以盡量安全的退出程序。 在程序的設(shè)計過程中, 要求能盡可能多的設(shè)想到用戶使用過程中 可能發(fā)生的事件,并能在判斷事件后做出相應(yīng)的處理,使程序具有較高的容錯性能。 (2)宜操作性,程序簡單易懂,容易上手使用。設(shè)計界面是,簡化界面的復(fù)雜性,模擬 QQ 等現(xiàn)有即時通訊工具的界面,使用戶能很容易看懂并使用。(3)開發(fā)文檔易理解,保證以后自己開發(fā)時,能夠清晰的理解整個系統(tǒng)的設(shè)計思路和實 現(xiàn)細(xì)節(jié)。 (4) 模塊化設(shè)計此軟件的功能, 不同的模塊實現(xiàn)不同的功能, 使得軟件易于維護(hù)與擴(kuò)展。 (三)運(yùn)行需求分析 (1)用戶界面 程序較小,啟動速度快,無
8、啟動界面。在本地局域網(wǎng)中使用,所以無需進(jìn)行用戶登錄, 無需認(rèn)證界面,啟動后的應(yīng)用界面要清爽,設(shè)計要簡單明了,要具有較高的易用性。 (2)故障處理 在遇到可預(yù)知的故障與情況時, 能提示用戶并自動退出; 在遇到不可預(yù)知的故障時能安 全退出。三、功能設(shè)計 開發(fā)一個專用于實現(xiàn)兩臺計算機(jī)之間即時通訊的軟件,以方便兩臺計算機(jī)之間信息的交流。,在連接并通信時,尤其是近程的即時通訊,徹底的脫離了遠(yuǎn)程的服務(wù)器,避免了和遠(yuǎn)程服務(wù)器連接時過多的浪費(fèi)網(wǎng)絡(luò)資源。并且避免了服務(wù)器忙或與服務(wù)器無法連接時,浪費(fèi)過多時間用于和服務(wù)器建立連接!因此,這個軟件是極具適應(yīng)性和實用性的即時通訊軟件!本次課程設(shè)計的目的是學(xué)習(xí)基于UDP協(xié)
9、議實現(xiàn)網(wǎng)絡(luò)聊天程序,已達(dá)到學(xué)會面向無連接方式的程序設(shè)計方法,并理解網(wǎng)絡(luò)編程中面向無連接的概念。1、課程設(shè)計的內(nèi)容 用戶數(shù)據(jù)報(UDP)是一個無連接協(xié)議,使用這種協(xié)議時,需要在兩臺計算機(jī)之間建立固定的連接,也就是說,通信雙方?jīng)]有服務(wù)器和客戶機(jī)之分,它們之間進(jìn)行的是對等通信,所以它的優(yōu)勢很明顯,是現(xiàn)代通信不可或缺的一部分。所以,利用它的優(yōu)勢設(shè)計一個可以實現(xiàn)私聊和群聊的軟件,實現(xiàn)兩臺計算機(jī)間的即時通訊。2、 課程設(shè)計要求 基于UDP協(xié)議實現(xiàn)一對一的聊天的聊天,提供友好的用戶界面,便于用戶進(jìn)行操作。根據(jù)目前使用聊天程序的用戶需求顯示,用戶對于聊天程序主要有以下幾點(diǎn)要求:(1) 聊天功能:可以實現(xiàn)實時接
10、收和發(fā)送文字信息,并能支持公聊和私聊的方式。 (2)用戶功能:可以查看對方的開放信息,以及發(fā)送方的IP 四、系統(tǒng)實現(xiàn)1、原理概述 采用UDP協(xié)議,通過服務(wù)器中轉(zhuǎn)方式。因此,現(xiàn)在的IP偵探在你僅僅跟對方發(fā)送聊天消息的時候是無法獲取到IP的。UDP 協(xié)議是不可靠協(xié)議,它只管發(fā)送,不管對方是否收到。但它的傳輸很高效,因為UDP協(xié)議排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來完成,極大降低了執(zhí)行時間,使速度得到了保證。例如,騰訊采用了上層協(xié)議來保證可靠傳輸:如果客戶端使用UDP協(xié)議發(fā)出消息后,服務(wù)器收到該包,需要使用UDP協(xié)議發(fā)回一個應(yīng)答包。如此來保證消息可以無遺漏傳輸。2、程序的開發(fā)步
11、驟如下:1、 創(chuàng)建UDPmessage類,繼承JFrame成為框體類,并實現(xiàn)ActionListener接口。該類中包括多個成員變量,它們分別是信息接收文本域,信息發(fā)送文本框,IP文本框、“發(fā)送”按鈕和數(shù)據(jù)包套接字。2、 在構(gòu)造方法中初始化窗體組間,并將組間布局 到窗體中,然后調(diào)用Server()方法創(chuàng)建數(shù)據(jù)包套接字,并添加“發(fā)送”按鈕的事件監(jiān)聽器。3、 編寫Server()方法,該方法負(fù)責(zé)創(chuàng)建DatagramSocket數(shù)據(jù)包套接字和接收信息的DatagramPacket數(shù)據(jù)包,最重要的是,該方法在線程中使用無限循環(huán)實現(xiàn)數(shù)據(jù)包的接收,這是網(wǎng)絡(luò)程序設(shè)計必須掌握的接收數(shù)據(jù)的方法,這樣才能保證數(shù)據(jù)
12、的持續(xù)接收。然后獲取數(shù)據(jù)包中的IP信息,也就是數(shù)據(jù)包發(fā)送者的IP地址,這個IP地址將隨數(shù)據(jù)包中的信息一起添加到信息接收文本域中,以區(qū)分信息的發(fā)布者。4、 實現(xiàn)ActionListener借口中的actionPerformed()方法,該方法用于處理“發(fā)送”按鈕的單擊事件,它需要獲取ip文本框中的IP信息,這個IP地址將綁定到準(zhǔn)備發(fā)送的數(shù)據(jù)包中。5、 編寫本類的main()主方法,只需簡單地創(chuàng)建主窗體對象就可以了。 6 . 在兩臺計算機(jī)上分別運(yùn)行,修改IP文本框中的IP地址為接收一方的IP,輸入內(nèi)容點(diǎn)擊放松就可以接收了。五、 設(shè)計過程實現(xiàn)代碼如下:主機(jī)A的代碼:package qq;import
13、 java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import javax.swing.*;public class UDPmessage extends JFrame implements ActionListener /* * */private static final long serialVersionUID = 1L;private JTextArea text;/信息接收文本域private JTextField ipText;/IP文本框private JTextField send
14、Text;/信息發(fā)送文本框private JButton button;/發(fā)送按鈕private DatagramSocket socket;/數(shù)據(jù)報套接字private JScrollBar vsBar;/滾動條 public UDPmessage()setTitle("UDP聊天程序");/設(shè)置窗體標(biāo)題setBounds(100,100,400,300);/窗體定位與大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/默認(rèn)關(guān)閉操作為退出程序setLayout(new BorderLayout();/窗體使用邊界布局管理器t
15、ext=new JTextArea();/實例化信息接收文本域text.setEditable(false);/信息接收文本域不可編輯JScrollPane textPanel=new JScrollPane(text);/信息接收文本域添加滾動面板vsBar=textPanel.getVerticalScrollBar();/獲取滾動面板的垂直滾動條add(textPanel,BorderLayout.CENTER);/添加滾動面板到窗體居中位置JPanel panel=new JPanel();/創(chuàng)建panel面板BorderLayout panelLayout=new BorderLay
16、out();/創(chuàng)建邊界布局管理器panelLayout.setHgap(5);/設(shè)置布局水平邊界panel.setLayout(panelLayout);/將布局管理器注入panel面板ipText=new JTextField("122.206.73.14");/實例化IP文本框(請輸入你自己IP地址)panel.add(ipText,BorderLayout.WEST);/添加文本框到panel面板sendText=new JTextField();/實例化信息發(fā)送文本框panel.add(sendText,BorderLayout.CENTER);/添加信息發(fā)送文本框
17、到panelbutton=new JButton("發(fā)送");/實例化發(fā)送按鈕panel.add(button,BorderLayout.EAST);/添加按鈕到panel面板add(panel,BorderLayout.SOUTH);/添加面板到窗體setVisible(true);/顯示窗體server();/調(diào)用Server()方法button.addActionListener(this);/添加按鈕事件監(jiān)聽器private void server() trysocket=new DatagramSocket(9527);/實例化數(shù)據(jù)報套接字byte buf=new
18、 byte1024;final DatagramPacket dpl=new DatagramPacket(buf,buf.length);/創(chuàng)建接收數(shù)據(jù)的數(shù)據(jù)包Runnable runnable=new Runnable()/定義線程public void run()while(true) /使用無限循環(huán)體tryThread.sleep(100);/線程休眠時間為100mssocket.receive(dpl);/接收數(shù)據(jù)包int length=dpl.getLength();String message=new String(dpl.getData(),0,length);/獲取數(shù)據(jù)包的字
19、符串信息String ip=dpl.getAddress().getHostAddress();if(!InetAddress.getLocalHost().getHostAddress().equals(ip)text.append(ip+":n "+message+"n");vsBar.setValue(vsBar.getMaximum();/控制信息滾動catch(IOException e)e.printStackTrace();catch(InterruptedException e)e.printStackTrace();new Thread
20、(runnable).start();catch(SocketException e)e.printStackTrace();public void actionPerformed(ActionEvent ev)tryString ip=ipText.getText();/獲取IP文本框內(nèi)容InetAddress address=InetAddress.getByName(ip);byte data=sendText.getText().getBytes();/獲取發(fā)送的數(shù)據(jù)DatagramPacket dp=new DatagramPacket(data,data.length,addres
21、s,9527);/定義數(shù)據(jù)包String myip=InetAddress.getLocalHost().getHostAddress();/獲取本機(jī)IP/將發(fā)送信息添加到信息接收文本域中text.append(myip+":n "+sendText.getText()+":n");socket.send(dp);/發(fā)送數(shù)據(jù)包sendText.setText(null);catch(UnknownHostException e)e.printStackTrace();catch(IOException e) e.printStackTrace();pub
22、lic static void main(String args) UDPmessage udp= new UDPmessage(); udp.setVisible(true);運(yùn)行后的對話框主機(jī)B的代碼:package qq;import java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import javax.swing.*;public class UDPmessage extends JFrame implements ActionListener /* * */private static
23、 final long serialVersionUID = 1L;private JTextArea text;/信息接收文本域private JTextField ipText;/IP文本框private JTextField sendText;/信息發(fā)送文本框private JButton button;/發(fā)送按鈕private DatagramSocket socket;/數(shù)據(jù)報套接字private JScrollBar vsBar;/滾動條public UDPmessage()setTitle("UDP聊天程序");/設(shè)置窗體標(biāo)題setBounds(100,100
24、,400,300);/窗體定位與大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/默認(rèn)關(guān)閉操作為退出程序setLayout(new BorderLayout();/窗體使用邊界布局管理器text=new JTextArea();/實例化信息接收文本域text.setEditable(false);/信息接收文本域不可編輯JScrollPane textPanel=new JScrollPane(text);/信息接收文本域添加滾動面板vsBar=textPanel.getVerticalScrollBar();/獲取滾動面板的垂直滾動條add(
25、textPanel,BorderLayout.CENTER);/添加滾動面板到窗體居中位置JPanel panel=new JPanel();/創(chuàng)建panel面板BorderLayout panelLayout=new BorderLayout();/創(chuàng)建邊界布局管理器panelLayout.setHgap(5);/設(shè)置布局水平邊界panel.setLayout(panelLayout);/將布局管理器注入panel面板ipText=new JTextField("122.206.73.136");/實例化IP文本框(請輸入你自己IP地址)panel.add(ipText,
26、BorderLayout.WEST);/添加文本框到panel面板sendText=new JTextField();/實例化信息發(fā)送文本框panel.add(sendText,BorderLayout.CENTER);/添加信息發(fā)送文本框到panelbutton=new JButton("發(fā)送");/實例化發(fā)送按鈕panel.add(button,BorderLayout.EAST);/添加按鈕到panel面板add(panel,BorderLayout.SOUTH);/添加面板到窗體setVisible(true);/顯示窗體server();/調(diào)用Server()方法
27、button.addActionListener(this);/添加按鈕事件監(jiān)聽器private void server() trysocket=new DatagramSocket(9527);/實例化數(shù)據(jù)報套接字byte buf=new byte1024;final DatagramPacket dpl=new DatagramPacket(buf,buf.length);/創(chuàng)建接收數(shù)據(jù)的數(shù)據(jù)包Runnable runnable=new Runnable()/定義線程public void run()while(true) /使用無限循環(huán)體tryThread.sleep(100);/線程休
28、眠時間為100mssocket.receive(dpl);/接收數(shù)據(jù)包int length=dpl.getLength();String message=new String(dpl.getData(),0,length);/獲取數(shù)據(jù)包的字符串信息String ip=dpl.getAddress().getHostAddress();if(!InetAddress.getLocalHost().getHostAddress().equals(ip)text.append(ip+":n "+message+"n");vsBar.setValue(vsBar
29、.getMaximum();/控制信息滾動catch(IOException e)e.printStackTrace();catch(InterruptedException e)e.printStackTrace();new Thread(runnable).start();catch(SocketException e)e.printStackTrace();public void actionPerformed(ActionEvent ev)tryString ip=ipText.getText();/獲取IP文本框內(nèi)容InetAddress address=InetAddress.ge
30、tByName(ip);byte data=sendText.getText().getBytes();/獲取發(fā)送的數(shù)據(jù)DatagramPacket dp=new DatagramPacket(data,data.length,address,9527);/定義數(shù)據(jù)包String myip=InetAddress.getLocalHost().getHostAddress();/獲取本機(jī)IP/將發(fā)送信息添加到信息接收文本域中text.append(myip+":n "+sendText.getText()+":n");socket.send(dp);/發(fā)送數(shù)據(jù)包sendText.setText(null);catch(UnknownHostException
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年銷售合同管理與執(zhí)行規(guī)范3篇
- 2025年度網(wǎng)絡(luò)安全宣傳合作合同3篇
- 2024年能源管道鋪設(shè)合同
- 2025年度贖樓借款合同風(fēng)險防范指南2篇
- 2025至2030年中國高精度數(shù)字式溫度巡測儀數(shù)據(jù)監(jiān)測研究報告
- 2025年度行政事業(yè)單位內(nèi)部控制流程圖定制與優(yōu)化合同3篇
- 二零二五年度能源行業(yè)運(yùn)維人員勞動合同范本
- 二零二五年度建筑工程施工現(xiàn)場員工安全責(zé)任協(xié)議
- 2024版網(wǎng)絡(luò)平臺技術(shù)服務(wù)與運(yùn)營外包合同
- 2025年度叉車智能充電系統(tǒng)維保與升級合同
- 承諾函(支付寶)
- FZ/T 81024-2022機(jī)織披風(fēng)
- GB/T 24123-2009電容器用金屬化薄膜
- 艾滋病梅毒乙肝實驗室檢測
- 國鐵橋梁人行道支架制作及安裝施工要點(diǎn)課件
- 領(lǐng)導(dǎo)科學(xué)全套精講課件
- 粵教版地理七年級下冊全冊課件
- 小學(xué)科學(xué)蘇教版六年級上冊全冊精華知識點(diǎn)(2022新版)
- 萎縮性胃炎共識解讀
- 2022版義務(wù)教育語文課程標(biāo)準(zhǔn)(2022版含新增和修訂部分)
- 精品金屬線管布線施工工程施工方法
評論
0/150
提交評論