计算机网络课程设计UDP聊天室代码(共30页).doc
《计算机网络课程设计UDP聊天室代码(共30页).doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计UDP聊天室代码(共30页).doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上计算网络UDP聊天室 学 院 计算机学院 专 业 软件工程 年级班别 2011级1班 学 号 学生姓名 指导教师 许青林 成 绩 .实验目的 UDP是无链接的通信方式,通信开销小,利用UDP实现聊天系统。通过实验掌握UDP的工作原理及应用方法。.实验要求 1、采用多线程技术,多用户同时在线。 2、实现群聊功能,一个人发消息多人可收到。 3、用JAVA实现 UDP开发模型如下: .系统结构聊天系统分为服务器端和客户端。服务器程序作为一个中转站,所有客户端都只与服务器进行通信。如图:.程序设计服务器端:服务器与客户间通过套接口Socket连接。在java中使用套接口相当简
2、单,Java API为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易服务器采用多线程以满足多用户的请求,服务端主要用到InetAddress, DatagramSocket, DatagramPacket三个类;InetAddress用于描述和包装一个Internet IP地址;DatagramSocket用于接收和发送UDP的Socket实例;DatagramPacket用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。客户端:客户端是一个Java Application程序,客户通过Socket 建立与服务器的连接。
3、主要用到InetAddress, DatagramSocket, DatagramPacket三个类三个类。界面设计:客户端UI设计:Chat Boxes有五个输入框,包括本机端口,服务器端口,本机IP地址,服务器IP地址输入以及消息输入框,依次为Personal port,Server port,Nickname和Server IP以及send按钮左旁的输入框,且在输入的消息中自动获取本机时间,然后和发送消息一起打包发到服务器,服务器接收后发到客户端。服务器IP不为空。 Server UI设计:Server chat boxes有两个输入框,分别是服务器端口(Server port)和客户端
4、端口(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
5、 destaddr;private String name;private String msg;public Sendmessage(InetAddress addr, InetAddress destaddr, String name, String msg) this.addr = addr;this.destaddr = destaddr;this.name = name;this.msg = msg;public InetAddress getAddr() return addr;public InetAddress getDestaddr() return destaddr;pub
6、lic 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.Bu
7、fferedInputStream;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;i
8、mport .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;imp
9、ort 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 co
10、n;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 JFra
11、me(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();re
12、ceivePortText.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
13、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.appen
14、d(= +=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 ByteArrayInputSt
15、ream(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 =
16、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.pri
17、ntStackTrace();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(re
18、ceivePortText.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计 UDP 聊天室 代码 30
限制150内