JAVA聊天室附完整代码
聊天室代码(C#)

实现用C#做一个聊天室客户端的代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using ;using .Sockets;using System.Windows.Forms;namespace EasyChat{public partial class login_frm : Form{///<summary>/// IP地址///</summary>private IPAddress _ipAddr;#region登录窗体构造函数///<summary>///构造函数,自动生成///</summary>public login_frm(){InitializeComponent();}#endregion#region登录窗体的私有方法///<summary>///验证登录信息///</summary>///<returns>验证结果</returns>private bool ValidateInfo(){if (user_tb.Text.Trim() == string.Empty){MessageBox.Show("请填写用户名!","提示",MessageBoxButtons.OK,rmation);return false;}if (!IPAddress.TryParse(svrip_tb.Text, out _ipAddr)) {MessageBox.Show("IP地址不合法!","提示",MessageBoxButtons.OK,rmation);return false;}int _port;if (!int.TryParse(svrport_tb.Text, out _port)){MessageBox.Show("端口号不合法!","提示",MessageBoxButtons.OK,rmation);return false;}else{if (_port < 1024 || _port > 65535){MessageBox.Show("端口号不合法!","提示",MessageBoxButtons.OK,rmation);return false;}}return true;}///<summary>///取消,关闭窗体///</summary>///<param name="sender"></param>///<param name="e"></param>private void cancel_btn_Click(object sender, EventArgs e){this.Close();}///<summary>///登录///</summary>///<param name="sender"></param>///<param name="e"></param>private void login_btn_Click(object sender, EventArgs e){//验证数据合法性if (!ValidateInfo()){return;}int port = int.Parse(svrport_tb.Text);//向服务器发出连接请求TCPConnection conn = new TCPConnection(_ipAddr, port);TcpClient _tcpc = conn.Connect();if (_tcpc == null){MessageBox.Show("无法连接到服务器,请重试!","错误",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);}else{NetworkStream netstream = _tcpc.GetStream();//提供用于访问网络的基本数据流//向服务器发送用户名以确认身份netstream.Write(Encoding.Unicode.GetBytes(user_tb.Text), 0, Encoding.Unicode.GetBytes(user_tb.Text).Length);//得到登录结果byte[] buffer = new byte[50];netstream.Read(buffer, 0, buffer.Length);//该方法将数据读入 buffer 参数并返回成功读取的字节数。
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地址。
局域网聊天程序客户端代码+详解

import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;//引入包。
public class ChatClient {public static void main(String[] args) {ChatClient cc = new ChatClient();cc.receive();}JTextField jtf; // 文本条JTextArea jta; //文本域。
Socket s; //客户端PrintWriter out; //输出流BufferedReader in; //输入流public ChatClient() {JFrame frame = new JFrame("ChatClient");//窗口frame.setSize(400, 300); //大小jta = new JTextArea(); //文本域jta.setEditable(false); //不可编辑jtf = new JTextField();//文件条jtf.addActionListener(new ActionListener() { //添加监听。
public void actionPerformed(ActionEvent arg0) {send(); //调用send()方法}});frame.getContentPane().add(new JScrollPane(jta)); //添加滚动条frame.getContentPane().add(jtf, "South"); //添加文本条frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口。
frame.setVisible(true); //可显示的。
JAVA结合WebSocket实现简单客服聊天功能

JAVA结合WebSocket实现简单客服聊天功能说明:该⽰例只简单的实现了客服聊天功能。
1、聊天记录没有保存到数据库中,⼀旦服务重启,消息记录将会没有,如果需要保存到数据库中,可以扩展2、页⾯样式⽤的⽹上模板,样式可以⾃⼰进⾏修改3、只能由⽤户主要发起会话,管理员⽆法主动进⾏对话4、页⾯之间跳转代码没有包含在⾥⾯,请⾃⼰书写,在管理员消息列表页中,需要把该咨询的⽤户ID带到客服回复页⾯中5、${websocket_url} 这个为项⽬的URL地址效果截图:客服回复页⾯(member_admin_chat.html)管理员消息列表页(member_admin_chat_list.html)⽤户咨询页⾯(member_chat.html)代码:页⾯所需要⽤到的基础样式、图⽚,下载链接:(这个只是⾃⼰⽹上下载的样式demo,可以根据⾃⼰的来)pom.xml <dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>8.0</version><scope>provided</scope></dependency>或者jar包javax.websocket-api-1.0.jar下载地址:配置类WebSocketConfig.javapackage com.config;import javax.websocket.Endpoint;import javax.websocket.server.ServerApplicationConfig;import javax.websocket.server.ServerEndpointConfig;import java.util.Set;public class WebSocketConfig implements ServerApplicationConfig {@Overridepublic Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> endpointClasses) { return null;}@Overridepublic Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {//在这⾥会把含有@ServerEndpoint注解的类扫描加载进来,可以在这⾥做过滤等操作return scanned;}}消息DTO类(使⽤了lombok,这⾥不在多做说明)ChatDTO.javapackage com.websocket.dto;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;/*** @author 。
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聊天工具代码

else if(pareTo("close")==0) {
try {
DataInputStream is=new DataInputStream(socket.getInputStream());
if(pareTo("start")==0) {
try {
int po=Integer.parseInt(port.getText());
svsocket=new ServerSocket(po);
daemons=new Daemon[MAXUSER];
close.addActionListener(this);
add(panel2,BorderLayout.SOUTH);
tamsg=new TextArea();
tamsg.setBackground(Color.PINK);
tamsg.append("输入你要链接的地址,然后按(link)按钮\n");
}
catch (Exception exc) {
tamsg.append("error happended link\n");
tamsg.append(exc.toString());
}
}
else if(pareTo("id_ok")==0)
DataOutputStream os=new DataOutputStream(socket.getOutputStream());
os.write(strmsg.getBytes());
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); }}}。
JAVA聊天程序设计代码及报告

JAVA聊天程序设计代码及报告import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Scanner;public class ChatClientpublic static void main(String[] args)final String HOST_NAME = "localhost";final int PORT_NUMBER = 1234;trySocket socket = new Socket(HOST_NAME, PORT_NUMBER);System.out.println("Connected to chat server!");BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream());PrintWriter writer = new PrintWriter(socket.getOutputStream(, true);// read user input in a separate threadThread inputThread = new Thread(( ->Scanner scanner = new Scanner(System.in);while (true)String userInput = scanner.nextLine(;writer.println(userInput);}});inputThread.start(;// continuously read server responsesString serverResponse;while ((serverResponse = reader.readLine() != null)System.out.println("Server: " + serverResponse);}} catch (Exception e)System.out.println("Error: " + e.getMessage();}}该聊天程序是一个基于TCP协议的客户端程序,使用了Java Socket 进行通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Thread
ClientReceive - socket: Socket -output:ObjectOutputStream -input:ObjectInputStream +ClientReceive(Socket,ObjectOutputStream,Object InputStream,JComboBox,JTextArea,JTextField )
五、测试数据及其结果分析
1、首先运行 ChatServer 工程文件,会出现如下画面
2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为 8888;
5
3、选择启动服务,服务器开始在您刚才设置的端口中侦听; 4、运行 ChatClient 工程文件,打开如下画面
6
5、选择用户设置可以设置自己的登录名 6、选择连接设置可以设置您的 IP 地址和端口号
上。
(4)PortConf.java:该类继承自 JDialog,是用户对服务器端侦听端口进行修 改配置的类。
(5)Node.java:用户链表的节点类,定义了链表中的用户。该类与前面所讲 的链表节点 Node 类的功能相当。
(6)UserLinkList.java:用户链表节点的具体实现类。该类通过构造函数构造 用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根
2
(3) 流程图
聊天室服务器
端口服务 设置侦听端口
默认端口:8888
启动服务
聊天 退出
登录
用户设置 设置用户名 默认连接地址或用户名
设置 IP 地址和端口
聊天室客户端 连接设置
四、详细设计
1、聊天室服务器端设计:
JFrame
ActionListener
ChatServer -port:public static in -serverSocket:ServerSocket -messageShow:JTextArea -userLinkList:UserLinkList -showStatus:JTextField + ChatServer():public +init():public void +startService():public void +stopService():public void +sendStopToAll():public void +sendMsgToAll(String):public void + sendSystemMessage():public void
的用户名;
(2) 登录功能: 功能描述:在服务端开启的情况下,用户可以以自己自定义或者默认的登录
名和登录地址端口登录到客户端,并能在服务器端显示登录状态; (3) 公聊:
功能描述:用户在聊天室中可以选择与“所有人”聊天,聊天室中的其他在 线用户可以正常接收并正确显示公聊消息。 (4) 私聊:
功能描述:用户可以选择与聊天室的在线用户列表中的其他用户聊天。双方 的聊天记录对于聊天室的其他用户是不可见的。 (5) 聊天心情:
Thread
ServerListen - server: ServerSocket - userLinkList :UserLinkList - isStop: public Boolean S+eSrevrevreLrLisitsetnen(ServerSocket,JComboBox,JTextAre -a,sJeTrevxetrF: iSeeldrv,UersSeroLciknektList) - userLinkList :UserLinkList -SeisrSvteorpR:epcueibvleic Boolean +-tSexetravreeraL:JisTteexnt(ASerervaerSocket,JComboBox,JTextAre a- ,uJsTeerxLtFinikelLdi,sUt s:UersLeirnLkiLnkisLt)ist - isStop: public Boolean +ServerListen(ServerSocket,JComboBox,JTextAre 3a,JTextField,UserLinkList)
二、设计思路分析
聊天室是一项进行文本交互的软件,应用广泛,并且实用性强的一个非常典 型的人机交互系统。在信息世界里,聊天工具的使用是非常频繁的,如 MSN、 QQ、校内通之类的聊天工具许多人都正在使用。此次设计的聊天室系统主要针 对文本信息的传送和接收,不能像 QQ 一样进行图片、音频、视频等文件的传输。 虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用 JAVA 的技术, 进一步培养了面向对象程序设计的思想,加深对面向对象程序设计四大特性的理 解。
(2)聊天室客户端模块图:
聊天室客户端
用
连
用
发送
用
退
户
接
户
接收
户
出
设
设
登
聊天
注
置
置
录
消息
销
用户设置:用户可以设置自己的用户名进行聊天; 连接设置:用户可以设置自己的服务器的 IP 地址和端口号,默认的连接地址为: 127.0.0.1:8888; 用户登录:只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后 才能开始聊天,登录后不能再修改用户设置和连接设置; 用户注销:退出聊天,可以继续修改用户设置和连接设置; 发送和接收聊天信息:用户可以给所有人或者个别用户发送信息,并能看到其他 用户发送给自己或所有人的消息; 退出:关闭所有聊天并退出客户端。
7、选择登录进入聊天室并可以开始跟所有人或者个别其他用户聊天,其中可以 选择心情等;
7
8、在服务端也可以选择给所有人或者个别用户发送消息;
8
注意:客户端只有在服务端开启的情况下才能正常聊天。 9、多人聊天的服务器端与客户端情况
9
代码如下:
package liaotian;
/**Байду номын сангаас* 用户链表 */ public class UserLinkList {
三、概要设计
1、聊天室的简要功能介绍 该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天
室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊 天和基本的用户功能,登录、注销、查看在线用户等。 (1) 用户设置:
功能描述:用户自定义自己的登录名,成功设置后,服务端能接收到新设置
(1) 聊天室服务端模块图:
聊天室服务端
端
启
停
发
退
消
口
动
止
送
出
息
服
服
服
系
服
显
务
务
务
统
务
示
消
器
1息
端口服务:输入要侦听的端口,默认为 8888; 启动服务:启动服务器,并开始在设置的端口中侦听,客户端用户可以登录 并开始聊天; 停止服务:关闭服务器,侦听结束。客户端用户不能再聊天; 发送系统消息:服务器端给所有人或者个别用户发送消息。 消息显示:可以显示所有用户的聊天记录,和上线、下线信息。 退出服务器:退出程序,并停止服务;
专业课程设计 I
基于 JAVA 的聊天室设计与实现
一、课题内容和要求
基于网络的文本交互软件的设计和实现,设计和实现一个简单的基于网络的 文本消息发送和接收软件。基本要求:该软件能实现文本消息发送和接收功能。 提高要求(1):支持以多播方式发送文本消息,提高要求(2):性能稳定,界面 友好。按课程设计报告的要求写出详细的设计和实现报告。
人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服 务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起 到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园 地,个人用户可以通过聊天室将自己融入整个主流社会中。
根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要 求:
聊天室服务端主要包括 7 个文件,它们的功能如下: (1)ChatServer.java:包含名为 ChatServer 的 public 类,其主要功能为定义
服务器端的界面,添加事件侦听与事件处理。调用 ServerListen 类来实现服务端 用户上线与下线的侦听,调用 ServerReceive 类来实现服务器端的消息的收发。
(2)ServerListen.java:该类实现服务端用户上线与下线的侦听。该类对用户 上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线 与下线情况发生变化时,该类会对主类的界面进行相应的修改。
(3)ServerReceive.java:该类是实现服务器端的消息的收发的类。该类分别 定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面
功能描述:用户在聊天的过程中可以选择相应的心情来表达自己的情感。 (6) 系统消息:
功能描述:服务端正常运行的过程中,在聊天室的每一个用户都能接收服务 器端发送的信息提示信息。 (7) 用户的状态.
功能描述:每一个客户端用户都可以实时看到目前其他在线用户的状态。 (8) 用户注销:
功能描述:用户可以注销自己的账号,并重新登记登录名和地址。 (9) 用户退出:
据索引查找用户这 5 个方法。 (7)Help.java:服务端程序的帮助类。
2、聊天室客户端设计:
JFrame
ActionListener
ChatClient -port:public static in -serverSocket:ServerSocket -messageShow:JTextArea -userLinkList:UserLinkList -showStatus:JTextField + ChatClient():public +init():public void +Connect():public void +DisConnect():public void +SendMessage():public void