用Java编写的UDP协议简单聊天室

合集下载

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

摘要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐.目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。

该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。

前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。

后者通过与服务器建立连接,来进行客户端与客户端的信息交流。

其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。

开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。

在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。

经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java 语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网聊天 socket javaAbstractAlong with the fast development of Internet,the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example,Netmeeting, QQ,MSN—Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat。

Java聊天室的设计与实现毕业设计开题报告精选全文

Java聊天室的设计与实现毕业设计开题报告精选全文

精选全文完整版(可编辑修改)毕业设计开题报告2017年3月1日毕业设计开题报告1.结合毕业设计情况,根据所查阅的文献资料,撰写2000字左右的文献综述:文献综述研究背景及意义随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式已经难以满足人们的交流的需求了,网络聊天已经慢慢成为人们生活的一部分,呈现出良好的势头和广阔的发展前景。

在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。

作为通讯的一种运用的聊天软件,它继承了通讯软件的优点,它具有文字聊天、语音聊天、传送文件、拨打电话、远程协助、视频聊天、邮件辅助、发送短信、浏览咨询等等功能。

开发基于桌面的,面向个人的大众化聊天软件,可以满足网民在网络交流的需要,和电话、手机有着异曲同工之妙,但较之电话和手机,聊天软件具有方便快捷,功能强大,交流成本低等优点,因此受到广大个人用户的喜爱,网络聊天已经成为网络生活中不可或缺的一部分。

网上聊天软件是为人们相互进行交流和联系提供的一个平台,通过提供完善的网上聊天服务,可以达到增进彼此之间的了解,增加人与人之间的感情交流的目的。

同时,即时通信系统对现代企业也有着重大意义,由于聊天程序可以加装到台式机、笔记本电脑、手机等终端上,并且具有通讯、文件传输、视频音频会议等诸多强大的能力,能够有效地降低企业内部的通讯费用,提高工作效率。

越来越多的企业已开始认识到即时通信工具能够带来极高的生产力,并借助它的应用,来提高业务协同性及反馈的敏感度和快捷度。

随着不断地发展现如今聊天软件的开发技术已经比较成熟,各项功能也已日渐完善,聊天程序已不仅仅只是为了聊天,现阶段已获成功的聊天软件都早已将发展中心往建设平台方面发展,以后聊天软件更多承担的角色是一款能够产生价值的巨型航母。

本题目为基于socket的网络编程,具体需要实现C/S模式的聊天程序,使用了java 语言,java语言有下面一些特点:简单、面向对象、分布式、解释执行、安全、体系结构中立、可移植、高性能、多线程以及动态性。

java聊天室部分主要代码

java聊天室部分主要代码

ChatClient.javaimport java.awt.*;import java.io.*;import .*;import java.applet.*;import java.util.Hashtable;public class ChatClient extends Applet implements Runnable{ Socket socket=null;DataInputStream in=null;//读取服务器端发来的消息DataOutputStream out=null;//向服务器端发送的消息InputInfo 用户名提交界面=null;UserChat 聊天界面=null;Hashtable listTable;//用于存放在线用户的用户名的散列表Label 提示条;Panel north,center;Thread thread;public void init(){setSize(1000,800);int width=getSize().width;int height=getSize().height;listTable=new Hashtable();setLayout(new BorderLayout());用户名提交界面=new InputInfo(listTable);int h=用户名提交界面.getSize().height;聊天界面=new UserChat("",listTable,width,height-(h+5));聊天界面.setVisible(false);提示条=new Label("正在连接到服务器...",Label.CENTER);提示条.setForeground(Color.red);north=new Panel(new FlowLayout(FlowLayout.LEFT));center=new Panel();north.add(用户名提交界面);north.add(提示条);center.add(聊天界面);add(north,BorderLayout.NORTH);add(center,BorderLayout.CENTER);validate();}public void start(){if(socket!=null&&in!=null&&out!=null){try{socket.close();in.close();out.close();聊天界面.setVisible(false);}catch(Exception ee){}}try{socket=new Socket(this.getCodeBase().getHost(),6666);in=new DataInputStream(socket.getInputStream());out=new DataOutputStream(socket.getOutputStream());}catch(IOException ee){提示条.setText("连接失败");}//客户端成功连接服务器端if(socket!=null){InetAddress address=socket.getInetAddress();提示条.setText("连接:"+address+"成功");用户名提交界面.setSocketConnection(socket,in,out);north.validate();}if(thread==null){thread=new Thread(this);thread.start();}}public void stop(){try{socket.close();thread=null;}catch(IOException e){this.showStatus(e.toString());}}public void run(){while(thread!=null){if(用户名提交界面.getchatornot()==true){聊天界面.setVisible(true);聊天界面.setName(用户名提交界面.getName());聊天界面.setSocketConnection(socket,in,out);提示条.setText("祝聊天快乐!");center.validate();break;}try{Thread.sleep(100);}catch(Exception e){}}}}ChatMain.javaimport .*;import java.util.*;public class ChatMain {public static void main(String args[]) {ServerSocket server=null;Socket you=null;Hashtable peopleList;peopleList=new Hashtable();while(true){try{//服务器端在端口6666处监听来自客户端的信息server=new ServerSocket(6666);}catch(IOException e1){System.out.println("正在监听");}try{//当服务器端接收到客户端的消息后,取得客户端的IP地址。

UDP协议设计与实现

UDP协议设计与实现

UDP协议设计与实现UDP(User Datagram Protocol)是一种无连接的、不可靠的网络传输协议,它主要用于传输简单的、不重要的数据和需要实时性的数据。

UDP的设计与实现主要包括以下几个方面:1.数据报文格式:UDP报文的格式相对简单,包括一个首部和数据部分。

首部由源端口号、目的端口号、长度和校验和组成,每个字段占用16位。

数据部分则是实际待传输的数据。

由于UDP是无连接的,因此报文的数据部分没有分割成数据段,直接传输给接收方。

2.通信过程:UDP通信不需要建立连接,发送方直接将数据报文发送给接收方即可。

发送方首先获取接收方的IP地址和端口号,然后将数据报文打包加上首部信息,并将报文发送给网络层进行传输。

接收方接收到报文后,解析首部信息并获取数据,然后将数据提供给应用程序进行处理。

3.可靠性控制:UDP协议并不提供可靠性控制。

由于UDP是不可靠的,因此在传输过程中可能会出现丢包、重复、顺序错乱等问题。

为了提高可靠性,应用层可以采用一些方法,如发送确认、超时重传等。

但是这些机制都是应用层自己实现的,而不是由UDP协议提供。

4.速度和效率:UDP协议相比于TCP协议具有更高的传输速度和更低的开销。

由于UDP不需要进行连接的建立和断开操作,并且没有拥塞控制等复杂的机制,因此可以更快速地传输数据。

此外,UDP还可以进行广播和多播操作,可以将数据同时发送给多个接收方,提高传输效率。

5.适用场景:UDP适用于实时性要求较高的场景,例如在线游戏、音视频传输等。

由于UDP具有较低的开销和较高的传输速度,能够更快地将数据传输给对方,满足实时交互的需求。

此外,UDP还可以进行广播和多播操作,适用于需要将数据同时发送给多个接收方的场景。

总结起来,UDP协议的设计与实现相对简单,主要包括数据报文格式的定义、通信过程的建立和数据的传输,无连接的特性使得UDP具有较低的开销和较高的传输速度,适用于实时性要求较高的场景。

局域网内的多功能聊天室的设计与实现

局域网内的多功能聊天室的设计与实现

JISHOU UNIVERSITY专业课课程论文题目:局域网内的多功能聊天室的设计与实现作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院局域网内的多功能聊天室的设计与实现局域网内的多功能聊天室的设计与实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。

本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。

本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。

这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。

主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。

聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable 表来存放当前在线用户信息以及用message表来存放聊天记录。

本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。

【关键词】Java,数据库,脚本语言,聊天系LAN of multi-function chat room design and ImplementationRaotao(College of Information Science and Engineering,Jishou University,Jishou,Hunan 416000)AbstractThe rapid development of computer technology today, with the popularity and development of Internet, people's work and life has become increasingly inseparable from the support of the information network, and the chat room is one of the most common, the most direct online communication mode.In this thesis, a network of friends, for the vast number of users with a network of have the aid of interpersonal information platform.The design of the LAN chat system is based on an open WEB server application development and design, its main characteristic is to complete the information transmission dynamically with high interactivity, effective customer request and has a more simple, more convenient database accessing method, easy maintenance and update.The technical program by JAVA, HTML, database and script language and combination.The main function modules include: user login, registration section; write and display chat recording part; the administrator manage the chat room management section.Chat system to prepare and display chat interface friendly, with action, expression, the public chat or operation; management can remove the unruly registered user, play online user and delete certain be inopportune or inappropriate chat records, according to the database needs analysis, defined in ACCESS 3: user table table for registered users of information, using activetable table to store the current online user information and the use of message table to store the chat record.This system is compared with other information exchange platform with the development of convenient, fast, less resource occupation, easy maintenance and other advantages.Key words:JA V A; data capture; information analysis ; Winpcap;Jpcap目录第一章引言 (1)1.1课题背景及意义 (1)1.2课题研究现状 (1)1.3研究内容 (2)1.4论文组织方式 (2)第二章关键技术 (3)2.1 JAVA概述 (3)2.2套接字 (3)2.2.1 Socket简介 (3)2.2.2 Socket工作过程 (4)2.3 TCP三次握手 (4)第三章需求分析 (5)3.1功能需求 (5)3.2性能要求 (5)3.2.1处理数据能力 (5)3.2.2时间特性 (5)3.2.3 数据库需求 (5)3.2.5 其他标准的约束 (5)3.2.6 外部接口需求 (6)3.2.7 通信接口 (7)第四章概要设计 (8)4.1体系结构设计 (8)4.1.1 复审数据流、控制流 (8)4.1.2软件体系结构 (8)4.2模块设计 (9)4.2.1 用户扫描系统模块 (9)4.2.2 在线交流系统模块 (10)4.2.3 系统配置系统 (11)第五章详细设计 (14)5.1用户登录模块 (14)5.2用户列表模块 (15)5.3文本聊天模块 (17)第六章测试及实现结果 (21)6.1测试环境 (21)6.2测试过程 (21)6.2.1用户登录及用户列表 (21)6.2.2 文本聊天 (22)6.2.3 文件传输 (25)结束语 (27)参考文献 (28)第一章引言1.1课题背景及意义在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越受大广大程序员的重视。

Java课程设计聊天室(含代码)

Java课程设计聊天室(含代码)

Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。

聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。

2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。

2.用户可以配置服务器端的侦听端口,默认端口为8888。

3.向已经连接到服务器端的用户发送系统消息。

4.统计在线人数。

5.当停止服务时,断开所有的用户连接。

B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。

2.用户可以配置要连接的服务器端的IP地址和端口号。

3.用户可以配置连接后显示的用户名。

4.当服务器端开启的话,用户可以随时登录和注销。

5.用户可以向所有人或某一个人发送消息。

学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。

3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。

基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。

一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。

Java 多人聊天 源码

Java 多人聊天 源码

Java 多人聊天源码1.ChatApplet.java类import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import yout.*;import javax.swing.border.*;import java.io.*;import .*;public class ChatApplet extends JApplet {boolean isStandalone = false;BorderLayout borderLayout1 = new BorderLayout();Border border1;JPanel jPanel2 = new JPanel();Border border2;BorderLayout borderLayout2 = new BorderLayout();JPanel jPanel1 = new JPanel();JButton buttonSend = new JButton();BorderLayout borderLayout3 = new BorderLayout();JPanel jPanel3 = new JPanel();Border border3;BorderLayout borderLayout4 = new BorderLayout();JTextField textTalk = new JTextField();JPanel jPanel4 = new JPanel();Border border4;BorderLayout borderLayout5 = new BorderLayout();JScrollPane jScrollPane1 = new JScrollPane();JTextArea textMessages = new JTextArea();PrintWriter out = null;/**Get a parameter value*/public String getParameter(String key, String def) {return isStandalone ? System.getProperty(key, def) :(getParameter(key) != null ? getParameter(key) : def); }/**Construct the applet*/public ChatApplet() {}/**Initialize the applet*/public void init() {try {jbInit();Client client = new Client(this);if (client.isConnected())out = client.getOutputStream();elseappendMessage("大大的错误!!");}catch(Exception e) {e.printStackTrace();}}/**Component initialization*/private void jbInit() throws Exception {border1 = BorderFactory.createEmptyBorder(9,9,9,9);border2 = BorderFactory.createEmptyBorder(9,9,9,9);border3 = BorderFactory.createEmptyBorder(2,0,2,5);border4 = BorderFactory.createEmptyBorder(0,0,5,0);this.setSize(new Dimension(400,300));this.getContentPane().setLayout(borderLayout1);jPanel2.setBorder(border2);jPanel2.setLayout(borderLayout2);buttonSend.setFocusPainted(false);buttonSend.setText("发送");buttonSend.addActionListener(newjava.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {buttonSend_actionPerformed(e);}});jPanel1.setLayout(borderLayout3);jPanel3.setBorder(border3);jPanel3.setLayout(borderLayout4);jPanel4.setBorder(border4);jPanel4.setLayout(borderLayout5);textTalk.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) {textTalk_keyPressed(e);}});this.getContentPane().add(jPanel2, BorderLayout.CENTER);jPanel2.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(buttonSend, BorderLayout.EAST);jPanel1.add(jPanel3, BorderLayout.CENTER);jPanel3.add(textTalk, BorderLayout.CENTER);jPanel2.add(jPanel4, BorderLayout.CENTER);jPanel4.add(jScrollPane1, BorderLayout.CENTER);jScrollPane1.getViewport().add(textMessages, null);}/**Get Applet information*/public String getAppletInfo() {return "Applet Information";}/**Get parameter info*/public String[][] getParameterInfo() {return null;}/**Main method*/public static void main(String[] args) {ChatApplet applet = new ChatApplet();applet.isStandalone = true;JFrame frame = new JFrame();//EXIT_ON_CLOSE == 3frame.setDefaultCloseOperation(3);frame.setTitle("Applet Frame");frame.getContentPane().add(applet, BorderLayout.CENTER);applet.init();applet.start();frame.setSize(400,320);Dimension d = Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);frame.setVisible(true);}//static initializer for setting look & feelstatic {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClass Name());}catch(Exception e) {}}public void appendMessage(String message) {textMessages.setText(message + textMessages.getText());}void buttonSend_actionPerformed(ActionEvent e) {String msg;msg = textTalk.getText().trim();if (msg.equals("") || msg == null) return;out.println(textTalk.getText());textTalk.setText("");}void textTalk_keyPressed(KeyEvent e) {if (e.getKeyChar() != '\n') return;out.println(textTalk.getText());textTalk.setText("");}}2.ChatServlet.javaimport javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class ChatServlet extends HttpServlet {private static final String CONTENT_TYPE = "text/html";/**Initialize global variables*/public void init(ServletConfig config) throws ServletException { super.init(config);try {new Server();}catch (IOException ex) {System.err.println("IO 错误:");ex.printStackTrace(System.err);destroy();}/**Process the HTTP Get request*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(CONTENT_TYPE);PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>ChatServlet</title></head>");out.println("<body>");out.println("<p>The servlet has received a GET. This is the reply.</p>");out.println("</body></html>");}/**Clean up resources*/public void destroy() {}}3.Client.javaimport java.io.*;import .*;public class Client {Socket socket = null;private String host;private boolean connected = false;public boolean isConnected() { return connected; }public Client(ChatApplet applet) {try {host = applet.getDocumentBase().getHost();//host = "202.115.4.246";socket = new Socket(host, Server.port);connected = true;new ClientRecieveThread(socket, applet).start();}catch (Exception ex) {applet.appendMessage(ex.getMessage());ex.printStackTrace(System.err);}public PrintWriter getOutputStream() throws IOException {return new PrintWriter(socket.getOutputStream(), true);}}4.ClientRecieveThread.javaimport java.io.*;import .*;public class ClientRecieveThread extends Thread {private ChatApplet applet = null;private Socket socket = null;public ClientRecieveThread(Socket socket, ChatApplet applet) { this.socket = socket;this.applet = applet;}public void run() {BufferedReader in = null;String inputLine;try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));while ((inputLine = in.readLine()) != null) {//if (inputLine.equalsIgnoreCase("quit")) break; applet.appendMessage(inputLine + "\n");}}catch (Exception ex) {ex.printStackTrace(System.err);}finally {Close();}}void Close() {try {socket.close();catch (Exception ex) {ex.printStackTrace(System.err);}}}5.Protocol.javapublic class Protocol {private String userid;public Protocol(String userid) {erid = userid;}public String processInput(String input) {return (userid + ": " + input);}}6.Server.javaimport java.io.*;import .*;import java.util.Vector;public class Server {private ServerSocket serverSocket = null;public static int port = 4444;private boolean listening = true;Vector clientSockets = new Vector(10);public Server() throws IOException {try {serverSocket = new ServerSocket(port);}catch (Exception ex) {System.err.println("不能监听端口:" + port); ex.printStackTrace(System.err);System.exit(-1);System.out.println("成功监听端口:" + port);while (listening)addClient(serverSocket.accept());serverSocket.close();}public void addClient(Socket socket) throws IOException {new ServerThread(socket, this).start();clientSockets.add(socket);send("欢迎 " + socket.getInetAddress().getHostName() + " 来到这里!");System.out.println("聊天室共有 " + clientSockets.size() + " 人");}public void removeClient(Socket socket) throws IOException {send("欢送 " + socket.getInetAddress().getHostName() + " 的离去");clientSockets.remove(socket);System.out.println("聊天室共有 " + clientSockets.size() + " 人");}public void send(String msg) throws IOException {Socket socket = null;for (int I = 0; I < clientSockets.size(); I++) {socket = (Socket)(clientSockets.get(I));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println(msg);}}public static void main(String[] args) throws IOException {new Server();}}7.ServerThread.javapublic class ServerThread extends Thread {private Server server = null;private Socket socket = null;private Protocol jcp = null;private String userid;public ServerThread(Socket socket, Server server) {super("jetic Chat Server");this.socket = socket;this.server = server;userid = socket.getInetAddress().getHostName();jcp = new Protocol(userid);}public void run() {PrintWriter out = null;BufferedReader in = null;String inputLine, outputLine;try {out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream()));out.println("你可以开始你的闲聊了:)");while ((inputLine = in.readLine()) != null) {if (inputLine.equalsIgnoreCase("quit")) break;outputLine = jcp.processInput(inputLine);server.send(outputLine);}}catch (Exception ex) {ex.printStackTrace(System.err);Close();}finally {Close();}}private void Close() {try {server.removeClient(socket);socket.close();}catch (Exception ex) {ex.printStackTrace(System.err); }}}。

基于UDP协议的聊天程序设计报告

基于UDP协议的聊天程序设计报告

编号:计算机网络课程设计题目:基于UDP的聊天程序系别:计算机科学与工程学院摘要随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。

网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。

本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows 程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。

服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。

关键词:网络通讯;客户端/服务器模型;用户数据报协议;套接字一、需求分析1.1 课程设计目的开发一个专用于实现两台计算机之间即时通讯的软件以方便两台计算机之间信息的交流。

在连接并通信时尤其是近程的即时通讯彻底的脱离了远程的服务器避免了和远程服务器连接时过多的浪费网络资源。

并且避免了服务器忙或与服务器无法连接时浪费过多时间用于和服务器建立连接因此这个软件是极具适应性和实用性的即时通讯软件本次课程设计的目的是学习基于UDP 协议实现网络聊天程序已达到学会面向无连接方式的程序设计方法并理解网络编程中面向无连接的概念。

1.2 课程设计的内容用户数据报UDP是一个无连接协议使用这种协议时并不需要在两台计算机之间建立固定的连接也就是说通信双方没有服务器和客户机之分它们之间进行的是对等通信所以它的优势很明显是现代通信不可或缺的一部分。

所以利用它的优势设计一个可以聊天的软件实现两台计算机间的即时通讯。

1.3 课程设计要求基于UDP协议实现的聊天和一对多的聊天提供友好的用户界面便于用户进行操作。

二 . UDP协议的理解:UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Java编写的UDP协议简单聊天室:
package com;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import .*;
public class Chat {
Frame frame = new Frame("个人聊天室");
TextField tfip = new TextField(15);// 用户输入IP地址的文本框List list = new List();// 用于显示接收消息的列表框DatagramSocket ds;
public Chat() {
try {
ds = new DatagramSocket(50000);
} catch (SocketException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
public void run() {
try {
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024); while (true) {
ds.receive(dp);
System.out.println("接收OK");
list.add(new String(buf, 0, dp.getLength()) + ":from"
+ dp.getAddress().getHostAddress(), 0);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public static void main(String[] args) {
Chat chat = new Chat();
chat.init();
}
public void init() {
frame.setSize(300, 300);
frame.add(list);
Panel p = new Panel();
p.setLayout(new BorderLayout());
// p.add(tfip,"West");
p.add("West", tfip);
TextField tfdata = new TextField(20);
p.add("East", tfdata);
frame.add("South", p);
frame.setVisible(true);
frame.setResizable(false);// 限制用户设置窗体的大小
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { frame.setVisible(false);
frame.dispose();
System.exit(0);
});
tfdata.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 有关网络发送信息的动作
byte[] buf = e.getActionCommand().getBytes();
try {
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(tfip.getText()), 50000);
ds.send(dp);
} catch (Exception e1) {
e1.printStackTrace();
}
((TextField) e.getSource()).setText("");// 清空文本框内容
}
});// 填写完内容后按下回车所触发的事件
}
}。

相关文档
最新文档