1、网络协议课程设计基于UDP的多人聊天系统源代码 基于UDP的多人聊天系统只需把两个客户段代码 与一个服务器代码导入就可以了,记得要把服务器ip:192.168.1.77(也可以自己在服务器程序中改一下),每个客户端需要设置一下ip,比如A客户端:192.168.1.78,B客户端:192.168.1.88,A客户端向B客户端通讯时,“请输入对方ip”,这项改为192.168.1.88,就可以了。客户端源代码程序:ChatFram.javapackage ChatFrame_01;import .*;import java.io.*;import java.awt.*;import java.a
2、wt.event.*;import javax.swing.*;import java.lang.*;import java.awt.color.*;import javax.swing.JOptionPane;public class ChatFrame extends JFrame JPanel contentPane; JLabel label1 = new JLabel();/ 发送消息 JLabel label2 = new JLabel();/ 输入ip Label label3 = new Label();/ 输入端口标签 Label label4 = new Label();/
3、 输出端口标签 JTextField textField1 = new JTextField();/ 发送消息 JTextField textField2 = new JTextField();/ 输入ip JTextField textField3 = new JTextField();/ 获得输入端口 JTextField textField4 = new JTextField();/ 获得输出端口 JButton button1 = new JButton(发送);/ 发送消息 TextArea textArea1 = new TextArea(); JOptionPane jopane
4、 = new JOptionPane(); DatagramPacket sendpacket, receivepacket;/ 声明发送和接收数据包 DatagramSocket sendsocket, receivesocket;/ 声明发送和接收DatagramSocket public ChatFrame() enableEvents(AWTEvent.WINDOW_EVENT_MASK); try toInit(); catch (Exception e) e.printStackTrace(); private void toInit() throws Exception cont
5、entPane = (JPanel) this.getContentPane(); label1.setText(发送信息:); label1.setBounds(new Rectangle(13, 100, 60, 21); contentPane.setLayout(null); contentPane.setBackground(Color.pink); this.setSize(new Dimension(363, 502); this.setTitle(多人聊天室); label2.setText(输入对方IP地址:); label2.setBounds(new Rectangle(
6、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.setText(3000); textField4.setText(3001); button1.setBounds(new Rectangle(280, 100, 59, 21); button1.addActionListener(new java.a
7、wt.event.ActionListener() public void actionPerformed(ActionEvent e) button1_actionPerformed(e); ); textField1.addKeyListener(new KeyAdapter() public void keyPressed(KeyEvent e) if (e.getKeyCode() = KeyEvent.VK_ENTER) String str = textField2.getText(); String str1=textField1.getText(); if (pareTo()
8、!= 0&!.equals(str1) try textArea1.append(nto + textField2.getText() + : + 3000 + say: + textField1.getText(); String s = textField1.getText(); byte data = s.getBytes(UTF-8); sendpacket = new DatagramPacket( data, data.length, InetAddress.getByName(192.168.1.77), 6666); sendsocket.send(sendpacket); c
9、atch (IOException exc) exc.printStackTrace(); textField1.setText(); ); textField4.setBounds(new Rectangle(240, 58, 90, 22); textField3.setBounds(new Rectangle(70, 58, 90, 22); textField2.setBounds(new Rectangle(123, 20, 120, 19); textField1.setBounds(new Rectangle(76, 100, 190, 19); textArea1.setBou
10、nds(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); contentPane.add(label1, null); contentPane.add(textField1, null); contentPane.add(textField2, null);
11、contentPane.add(textField3, null); contentPane.add(textField4, null); contentPane.add(textArea1, null); contentPane.add(button1, null); this.setVisible(true); bind(); protected void processWindowEvent(WindowEvent e) super.processWindowEvent(e); if (e.getID() = WindowEvent.WINDOW_CLOSING) System.exit
12、(0); public void waitforpackets() / 检测并接受对方发来的消息 while (true) try byte array = new byte100; receivepacket = new DatagramPacket(array, array.length); receivesocket.receive(receivepacket);/ 接收 textArea1.append(nfrom + receivepacket.getAddress() + : + receivepacket.getPort() + get:); String received =
13、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_actionPerforme
14、d(ActionEvent e) / 发送消息到对方 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 = textField2.getText()+|+textField1.getText(); byte data = s.getBytes(UT
15、F-8); sendpacket = new DatagramPacket(data, data.length, InetAddress .getByName(192.168.1.77), 6666); sendsocket.send(sendpacket); catch (IOException exc) exc.printStackTrace(); textField1.setText(); ChatApp.javapackage ChatFrame_01;import java.io.*;import javax.swing.UIManager;import java.awt.*;pub
16、lic class ChatApp boolean packFrame = false; ChatApp() ChatFrame frame = new ChatFrame(); if (packFrame) frame.pack(); else frame.validate(); / 放置窗体在屏幕中央 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height screenSize.height)
17、 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.waitforpackets(); public static void main(String args
18、) new ChatApp(); 服务器端:Server.javapackage ChatFrame_01;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .Socket;import java.util.*;public class Server List ips = new ArrayList(); DatagramSocket socket; DatagramPacket packet; DatagramSocket ssocket; DatagramPacket spacket; publ
19、ic Server() throws Exception socket = new DatagramSocket(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,
20、data.length,UTF-8); System.out.println(received); String ss = 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();