




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算网络UDP聊天室 学 院 计算机学院 专 业 软件工程 年级班别 2011级1班 学 号 学生姓名 指导教师 许青林 成 绩 .实验目的 UDP是无链接的通信方式,通信开销小,利用UDP实现聊天系统。通过实验掌握UDP的工作原理及应用方法。.实验要求 1、采用多线程技术,多用户同时在线。 2、实现群聊功能,一个人发消息多人可收到。 3、用JAVA实现 UDP开发模型如下: .系统结构聊天系统分为服务器端和客户端。服务器程序作为一个中转站,所有客户端都只与服务器进行通信。如图:.程序设计服务器端:服务器与客户间通过套接口Socket连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易服务器采用多线程以满足多用户的请求,服务端主要用到InetAddress, DatagramSocket, DatagramPacket三个类;InetAddress用于描述和包装一个Internet IP地址;DatagramSocket用于接收和发送UDP的Socket实例;DatagramPacket用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。客户端:客户端是一个Java Application程序,客户通过Socket 建立与服务器的连接。主要用到InetAddress, DatagramSocket, DatagramPacket三个类三个类。界面设计:客户端UI设计:Chat Boxes有五个输入框,包括本机端口,服务器端口,本机IP地址,服务器IP地址输入以及消息输入框,依次为Personal port,Server port,Nickname和Server IP以及send按钮左旁的输入框,且在输入的消息中自动获取本机时间,然后和发送消息一起打包发到服务器,服务器接收后发到客户端。服务器IP不为空。 Server UI设计:Server chat boxes有两个输入框,分别是服务器端口(Server port)和客户端端口(Personal port)和一个连接按钮(Connect);.代码:(按照下面的格式创建相应的java文件,将代码粘贴复制即可)1. Sendmessage,javapackage chatboxes;import java.io.Serializable;import .InetAddress;public class Sendmessage implements Serializable/* * */private static final long serialVersionUID = 1L;private InetAddress addr;private InetAddress destaddr;private String name;private String msg;public Sendmessage(InetAddress addr, InetAddress destaddr, String name, String msg) this.addr = addr;this.destaddr = destaddr; = name;this.msg = msg;public InetAddress getAddr() return addr;public InetAddress getDestaddr() return destaddr;public String getName() return name;public String getMsg() return msg;2. Serverchar.javapackage chatboxes;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .MulticastSocket;import .SocketException;import .UnknownHostException;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.ListIterator;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class Serverchat implements Runnable, ActionListenerprivate List addList;JTextArea showArea;JLabel lbl1, lbl2;JTextField sendPortText, receivePortText;JFrame mainJframe;JButton startBtn;JScrollPane JSPane;JPanel pane1, pane2;Container con;Thread thread = null;DatagramPacket sendPack, receivePack;DatagramSocket sendSocket, receiveSocket;private int sendPort, receivePort;private byte inBuf, outBuf;private MulticastSocket multiSocket = null;public Serverchat() throws UnknownHostException addList = new ArrayList();mainJframe = new JFrame(Server chat boxes);con = mainJframe.getContentPane();showArea = new JTextArea();showArea.setEditable(false);showArea.setLineWrap(true);lbl1 = new JLabel(Server port:);lbl2 = new JLabel(Personal port:);sendPortText = new JTextField();sendPortText.setColumns(5);receivePortText = new JTextField();receivePortText.setColumns(5);startBtn = new JButton(Connect);startBtn.addActionListener(this);pane1 = new JPanel();pane1.setLayout(new GridLayout(3,2);pane1.add(lbl1);pane1.add(receivePortText);pane1.add(lbl2);pane1.add(sendPortText);pane1.add(startBtn);JSPane = new JScrollPane(showArea);pane2 = new JPanel();pane2.setLayout(new FlowLayout();con.add(pane1, BorderLayout.NORTH);con.add(JSPane, BorderLayout.CENTER);con.add(pane2, BorderLayout.SOUTH);mainJframe.setSize(600,600);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);showArea.append(= +=n);showArea.append(= +=n);public static void main(String args) try new Serverchat(); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace();Overridepublic void run() Sendmessage msg;while (true) try receiveSocket.receive(receivePack);ByteArrayInputStream byteStream = new ByteArrayInputStream(receivePack.getData();ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(byteStream); Object o = is.readObject();msg = (Sendmessage) o;is.close();InetAddress test = receivePack.getAddress();if(!addList.contains(test)addList.add(test);for(InetAddress iaddr : addList)sendPack = new DatagramPacket(receivePack.getData(), receivePack.getData().length, iaddr,sendPort);sendSocket.send(sendPack);showArea.append(msg.getAddr() + :n + msg.getMsg() + n); catch (IOException el) showArea.append(el.getMessage()+n); catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();Overridepublic void actionPerformed(ActionEvent e) try if (e.getSource() = startBtn) if(sendPortText.getText().equals()sendPort = 10087;elsesendPort = Integer.parseInt(sendPortText.getText();if(receivePortText.getText().equals()receivePort = 10086;elsereceivePort = Integer.parseInt(receivePortText.getText();inBuf = new byte16384;sendSocket = new DatagramSocket();receivePack = new DatagramPacket(inBuf, inBuf.length);receiveSocket = new DatagramSocket(receivePort);thread = new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();startBtn.setEnabled(false);else catch (SocketException e1) showArea.append(System Error+e1.getMessage()+n); catch (IOException e1) showArea.append(System Error+e1.getMessage()+n);3. UIchat.javapackage chatboxes;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;import .UnknownHostException;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class UIchat implements Runnable, ActionListener JTextArea showArea;JLabel lbl1, lbl2, lbl3, lbl4;JTextField msgText, sendPortText, receivePortText, IPAddressText, name;JFrame mainJframe;JButton sendBtn, startBtn;JScrollPane JSPane;JPanel pane1, pane2;Container con;Thread thread = null;DatagramPacket sendPack, receivePack;DatagramSocket sendSocket, receiveSocket;private String username;private InetAddress sendIP;private int sendPort, receivePort;private byte inBuf, outBuf;public UIchat() mainJframe = new JFrame(Chat Boxes);con = mainJframe.getContentPane();showArea = new JTextArea();showArea.setEditable(false);showArea.setLineWrap(true);lbl1 = new JLabel(Personal port:);lbl2 = new JLabel(Server port:);lbl3 = new JLabel(Server IP:);lbl4 = new JLabel(Nickname:);sendPortText = new JTextField();sendPortText.setColumns(15);receivePortText = new JTextField();receivePortText.setColumns(15);name = new JTextField();name.setColumns(15);IPAddressText = new JTextField();IPAddressText.setColumns(15);startBtn = new JButton(Connect);startBtn.addActionListener(this);pane1 = new JPanel();pane1.setLayout(new GridLayout(5,2);pane1.add(lbl1);pane1.add(receivePortText);pane1.add(lbl2);pane1.add(sendPortText);pane1.add(lbl3);pane1.add(IPAddressText);pane1.add(lbl4);pane1.add(name);pane1.add(startBtn);JSPane = new JScrollPane(showArea);msgText = new JTextField();msgText.setColumns(40);msgText.setEditable(false);msgText.addActionListener(this);sendBtn = new JButton(Send);sendBtn.setEnabled(false);sendBtn.addActionListener(this);pane2 = new JPanel();pane2.setLayout(new FlowLayout();pane2.add(msgText);pane2.add(sendBtn);con.add(pane1, BorderLayout.NORTH);con.add(JSPane, BorderLayout.CENTER);con.add(pane2, BorderLayout.SOUTH);mainJframe.setSize(700, 600);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);showArea.append(= +=n);showArea.append( Please Keep The Ports Of The Chat Boxes Up With The Ports Of Server chat boxesn+ *The Nickname Is The IP Of Your Personal Computer IP*n+ *The Server IP Should Not Be Null!*n);showArea.append(= +=n);public static void main(String args) new UIchat();Overridepublic void actionPerformed(ActionEvent e) try if (e.getSource() = startBtn) inBuf = new byte16384;if(sendPortText.getText().equals()sendPort = 10086;elsesendPort = Integer.parseInt(sendPortText.getText();if(receivePortText.getText().equals()receivePort = 10087;elsereceivePort = Integer.parseInt(receivePortText.getText();if(name.getText().equals()username = InetAddress.getLocalHost().toString();elseusername = name.getText();sendIP = InetAddress.getByName(IPAddressText.getText();sendSocket = new DatagramSocket();receivePack = new DatagramPacket(inBuf, inBuf.length);receiveSocket = new DatagramSocket(receivePort);thread = new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();startBtn.setEnabled(false);sendBtn.setEnabled(true);msgText.setEditable(true);else String msg1 = msgText.getText();SimpleDateFormat format=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String msg=format.format(new Date()+ : +msg1;Sendmessage message = new Sendmessage(InetAddress.getLocalHost(),sendIP,username,msg);ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = null; oos = new ObjectOutputStream(baos); oos.writeObject(message); oos.flush(); outBuf = baos.toByteArray();sendPack = new DatagramPacket(outBuf, outBuf.length, sendIP,sendPort);sendSocket.send(sendPack);msgText.setText(null); catch (UnknownHostException e1) showArea.append(System Error+e1.getMessage()+n); catch (SocketException e1) showArea.a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年护理三基知识考试复习题库及答案
- 安丘市2025-2026学年八年级下学期语文月考模拟试卷
- 阿勒泰市2025-2026学年七年级下学期语文期末测试试卷
- 2025 年小升初石家庄市初一新生分班考试数学试卷(带答案解析)-(人教版)
- 2025 年小升初沧州市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 北京2025年会计证《财经法规与职业道德》试题
- 社区网格实体化建设课件
- 安徽省合肥市经开区清华附中2024-2025学年八年级(下)期中物理试卷(含答案)
- 农村腌菜销售合同范本
- 瓷砖商品购销合同范本
- 2025年毕节市农业发展集团有限公司招聘考试笔试试题(含答案)
- 供应链安全管理知识培训课件
- 2025年匹克球裁判试题及答案
- 2025秋苏教版科学三年级上册教学设计(附目录)
- 2025国家能源投资集团有限责任公司审计中心社会招聘12人笔试参考题库附带答案详解(10套)
- 2025年全国I卷高考地理试题和答案
- 《初中必读名著导读:《水浒传》核心知识点与深度解读》
- 深圳微利房管理办法
- 诊断学血管检查
- 大连市甘井子区社区工作者招聘笔试真题2024
- 生产安全会议纪要
评论
0/150
提交评论