計算機網絡編程實驗_第1頁
計算機網絡編程實驗_第2頁
計算機網絡編程實驗_第3頁
計算機網絡編程實驗_第4頁
計算機網絡編程實驗_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機網絡編程技術實 訓 報 告基于UDP協(xié)議多客戶有圖形用戶界面的網上聊天程序 UDP-based protocol multi-client with a graphical user interface, online chat program班 級:姓 名:學 號:伊犁師范學院電子與信息工程學院1 實驗目的鞏固所學的Java語言基礎知識,增進Java語言的編輯基本功,拓展常用類庫的應用,了解Java網絡程序設計的思路和方法,熟練掌握UDP協(xié)議編寫程序的設計方法,掌握基本網絡包的使用方法,熟練使用Socket以及多線程。2 實驗內容運用Java程序編寫聊天室,實現(xiàn)一個基于

2、UDP協(xié)議的簡單的聊天程序,支持多人聊天并且客戶端具有圖形化用戶界面。程序實現(xiàn)了聊天室的基本功能,其中有:1.啟動服務器。2.啟動登錄界面。3.進入客戶端界面。4.發(fā)送信息。5.離開客戶端界面。6.關閉服務器。三、實驗環(huán)境操作系統(tǒng):Windows平臺。測試環(huán)境:Eclipse。四、實驗步驟 1創(chuàng)建項目,組織文件 啟動Eclipse ,建立項目、包及各類,鍵入代碼,操作結果如圖1所示。圖1項目和文件2. 運行程序進行測試(1)首先運行Server.java,打開“聊天室服務器”。服務器IP地址為如圖2所示。圖2服務器控制臺(2) 服務器監(jiān)聽是否有新聊天者連接,如果沒有,一直

3、等待。如圖3所示。圖3 服務器等待(3)運行客戶端程序client.java,打開“多人聊天室“界面,客戶端1的IP地址為客戶端2的IP地址為9,如圖4所示。圖4聊天室客戶端界面(4) 在“多人聊天室”界面輸入框輸入聊天信息。如圖5所示。圖5在輸入框輸入聊天信息(5)在“多人聊天室”界面發(fā)送信息。如圖6所示。圖6發(fā)送聊天信息(6) 服務器端顯示兩個客戶端聊天內容,如圖7所示。圖7服務器端顯示聊天內容(7) 退出服務器和多人聊天室。五、程序清單/多人聊天室服務器端package ChatFrame_01;import .Datagram

4、Packet;import .DatagramSocket;import .InetAddress;import .Socket;import java.util.*;public class Server List ips = new ArrayList();DatagramSocket socket;DatagramPacket packet;DatagramSocket ssocket;DatagramPacket spacket;public Server() throws Exception socket = new DatagramS

5、ocket(6666);ssocket=new DatagramSocket(8888);public void listen() throws Exception byte array = new byte100;packet = new DatagramPacket(array, array.length);socket.receive(packet);byte data=packet.getData();String received = new String(data,0,data.length,UTF-8);System.out.println(received);String ss

6、 = received.split(|);String ip = ss0;byte dt=ss1.getBytes(UTF-8);spacket=new DatagramPacket(dt,dt.length,InetAddress.getByName(ip),3333);ssocket.send(spacket);public static void main(String args) throws Exception Server s = new Server();while (true) s.listen();/多人聊天室客戶端package ChatFrame_01;import ja

7、va.io.*;import javax.swing.UIManager;import java.awt.*;public class ChatApp boolean packFrame = false;ChatApp() ChatFrame frame = new ChatFrame();if (packFrame) frame.pack(); else frame.validate();/ 放置窗體在屏幕中央Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();Dimension frameSize = fra

8、me.getSize();if (frameSize.height screenSize.height) frameSize.height = screenSize.height;if (frameSize.width screenSize.width) frameSize.width = screenSize.width;frame.setLocation(screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2);frame.setVisible(true);frame.waitfo

9、rpackets();public static void main(String args) new ChatApp();/登錄窗口package ChatFrame_01;import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.lang.*;import java.awt.color.*;import javax.swing.JOptionPane;public class ChatFrame extends JFrame JP

10、anel contentPane;JLabel label1 = new JLabel();/ 發(fā)送消息JLabel label2 = new JLabel();/ 輸入ipLabel label3 = new Label();/ 輸入端口標簽Label label4 = new Label();/ 輸出端口標簽JTextField textField1 = new JTextField();/ 發(fā)送消息JTextField textField2 = new JTextField();/ 輸入ipJTextField textField3 = new JTextField();/ 獲得輸入端口

11、JTextField textField4 = new JTextField();/ 獲得輸出端口JButton button1 = new JButton(發(fā)送);/ 發(fā)送消息TextArea textArea1 = new TextArea();JOptionPane jopane = new JOptionPane();DatagramPacket sendpacket, receivepacket;/ 聲明發(fā)送和接收數(shù)據(jù)包DatagramSocket sendsocket, receivesocket;/ 聲明發(fā)送和接收DatagramSocketpublic ChatFrame()

12、enableEvents(AWTEvent.WINDOW_EVENT_MASK);try toInit(); catch (Exception e) e.printStackTrace();private void toInit() throws Exception contentPane = (JPanel) this.getContentPane();label1.setText(發(fā)送信息:);label1.setBounds(new Rectangle(13, 100, 60, 21);contentPane.setLayout(null);contentPane.setBackgrou

13、nd(Color.pink);this.setSize(new Dimension(363, 502);this.setTitle(多人聊天室);label2.setText(輸入對方IP地址:);label2.setBounds(new Rectangle(12, 19, 109, 23);label3.setText(輸入端口:);label3.setBounds(new Rectangle(12, 58, 55, 22);label4.setText(輸出端口:);label4.setBounds(new Rectangle(180, 58, 55, 22);textField3.set

14、Text(3000);textField4.setText(3001);button1.setBounds(new Rectangle(280, 100, 59, 21);button1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button1_actionPerformed(e););textField1.addKeyListener(new KeyAdapter() public void keyPressed(KeyEvent e) if

15、 (e.getKeyCode() = KeyEvent.VK_ENTER) String str = textField2.getText();String str1=textField1.getText();if (pareTo() != 0&!.equals(str1) try textArea1.append(nto + textField2.getText()+ : + 3000 + say: + textField1.getText();String s = textField1.getText();byte data = s.getBytes(UTF-8);sendp

16、acket = new DatagramPacket(data,data.length,InetAddress.getByName(9),6666);sendsocket.send(sendpacket); catch (IOException exc) exc.printStackTrace();textField1.setText(););textField4.setBounds(new Rectangle(240, 58, 90, 22);textField3.setBounds(new Rectangle(70, 58, 90, 22);textField2.se

17、tBounds(new Rectangle(123, 20, 120, 19);textField1.setBounds(new Rectangle(76, 100, 190, 19);textArea1.setBounds(new Rectangle(11, 140, 333, 315);textArea1.setEditable(false);textArea1.setBackground(Color.white);contentPane.add(label4, null);contentPane.add(label3, null);contentPane.add(label2, null

18、);contentPane.add(label1, null);contentPane.add(textField1, null);contentPane.add(textField2, null);contentPane.add(textField3, null);contentPane.add(textField4, null);contentPane.add(textArea1, null);contentPane.add(button1, null);this.setVisible(true);bind();protected void processWindowEvent(Windo

19、wEvent e) cessWindowEvent(e);if (e.getID() = WindowEvent.WINDOW_CLOSING) System.exit(0);public void waitforpackets() / 檢測并接受對方發(fā)來的消息while (true) try byte array = new byte100;receivepacket = new DatagramPacket(array, array.length);receivesocket.receive(receivepacket);/ 接收textArea1.append(nfro

20、m + receivepacket.getAddress() + :+ receivepacket.getPort() + get:);String received = new String(receivepacket.getData(), 0,receivepacket.getLength(), UTF-8);textArea1.append(received); catch (IOException se) se.printStackTrace();void bind() / 和對方建立連try sendsocket = new DatagramSocket(3000);receivesocket = new DatagramSocket(3333); catch (Exception e) void button1_actionPerformed(ActionEvent e) / 發(fā)送消息到對方String str = textField2.getText();String str1=textField1.getText();if (pareTo() != 0&!.equals(str1) try textArea1.append(n

溫馨提示

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

評論

0/150

提交評論