




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第javaGUI实现多人聊天功能本文实例为大家分享了javaGUI实现多人聊天的具体代码,供大家参考,具体内容如下
packagecom.ff.chat.chatserver.frame;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.EOFException;
importjava.io.IOException;
import.BindException;
import.ServerSocket;
import.Socket;
importjava.util.ArrayList;
importjava.util.Iterator;
publicclassServerFrameextendsJFrame{
JTextAreamsgArea;
ArrayListSocketsocketArrayList=newArrayList();
booleanserverFlag=true;//服务器启动标志
StringBuffersb=newStringBuffer();
ServerSocketserverSocket;
//创建服务器端的显示窗口
publicvoidcreatFrame(){
this.setTitle("聊天室-服务器端");
this.setSize(500,500);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//创建一个面板
JPaneljp=newJPanel(newBorderLayout());
//中间面板
JPanelcenterPanel=newJPanel();
msgArea=newJTextArea(30,40);
msgArea.setEditable(false);
JScrollPanejsp=newJScrollPane(msgArea);
centerPanel.add(jsp);
jp.add(centerPanel);
this.add(jp);
this.setVisible(true);
this.addWindowListener(newWindowAdapter(){
@Override
publicvoidwindowClosing(WindowEvente){
intres=JOptionPane.showConfirmDialog(null,"确定要关闭服务器吗?",
"操作提示",JOptionPane.OK_CANCEL_OPTION);
if(res==0){
try{
dispose();
serverSocket.close();
}catch(IOExceptionioException){
ioException.printStackTrace();
}
}
}
});
}
//启动服务器,创建ServerSocket
publicvoidstartServer(){
try{
//创建ServerSocket
serverSocket=newServerSocket(9998);
System.out.println("等待客户端连接");
//循环监听客户端连接
while(serverFlag){
if(serverSocket.isClosed()){
serverFlag=false;
break;
}
Socketsocket=serverSocket.accept();
System.out.println("客户端连接成功");
socketArrayList.add(socket);
//为每一个客户端开启一个线程,监听客户端发来的消息
newServerThread(socket).start();
}
}catch(BindExceptionb){
b.printStackTrace();
System.out.println("服务器端口被占用");
System.exit(0);
}catch(IOExceptione){
e.printStackTrace();
System.out.println("服务器启动失败");
serverFlag=false;
}
}
//创建一个内部类,开启一个线程,接收消息
classServerThreadextendsThread{
Socketsocket;
DataInputStreamin;
DataOutputStreamout;
booleanclientFlag=true;
publicServerThread(Socketsocket){
this.socket=socket;
try{
this.in=newDataInputStream(socket.getInputStream());
}catch(IOExceptione){
e.printStackTrace();
}
}
@Override
publicvoidrun(){
//监听接收客户端发送的消息
while(clientFlag){
if(socket.isClosed()){
break;
}
try{
Stringmsg=in.readUTF();//读到客户端发送的消息
sb.append(msg+"\n");
System.out.println(sb);
msgArea.setText(sb.toString());
//从服务器端向客户端发送消息
if(socketArrayList.size()0){
IteratorSocketit=socketArrayList.iterator();
while(it.hasNext()){
Socketsoc=it.next();
if(soc.isClosed()){//当客户端某个socket已经为关闭状态,移除此socket
it.remove();
continue;
}
//客户端socket如果没有关闭,向客户端发送消息
out=newDataOutputStream(soc.getOutputStream());
out.writeUTF(sb.toString());
out.flush();
}
}
}catch(EOFExceptionef){
System.out.println("ip为:"+socket.getInetAddress()+"的客户端下线了");
clientFlag=false;
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
packagecom.ff.chat.chatserver.frame;
publicclassServerRun{
publicstaticvoidmain(String[]args){
ServerFrameserverFrame=newServerFrame();
serverFrame.creatFrame();
serverFrame.startServer();
}
}
注意:要在自己的电脑上运行多次客户端需要勾选如下选项
1.登录界面
packagecom.ff.chat.chatclient.frame;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.IOException;
import.Socket;
publicclassLoginFrameextendsJFrame{
JTextFieldaccountField=null;
//创建窗口
publicvoidcreatFrame(){
this.setTitle("聊天窗口");
this.setSize(400,400);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
/*
*创建一个4行1列的面板
**/
JPaneljp=newJPanel(newGridLayout(4,1));
//欢迎登陆面板
JPanelwelcomePanel=newJPanel();
JLabelwelcomLabel=newJLabel("欢迎登陆");
welcomePanel.add(welcomLabel);
//账号面板
JPanelaccountPanel=newJPanel();
JLabelaccountLabel=newJLabel("账号");
accountField=newJTextField(15);
accountPanel.add(accountLabel);
accountPanel.add(accountField);
//密码面板
JPanelpasswordPanel=newJPanel();
JLabelpasswordLabel=newJLabel("密码");
JPasswordFieldpasswordField=newJPasswordField(15);
passwordPanel.add(passwordLabel);
passwordPanel.add(passwordField);
//登录按钮面板
JPanelbtnPanel=newJPanel();
JButtonloginBtn=newJButton("登录");
JButtonregBtn=newJButton("注册");
btnPanel.add(loginBtn);
btnPanel.add(regBtn);
jp.add(welcomePanel);
jp.add(accountPanel);
jp.add(passwordPanel);
jp.add(btnPanel);
this.add(jp);
this.setVisible(true);
//组件绑定事件监听
loginBtn.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//获得账号密码
Stringaccount=accountField.getText();
Stringpassword=newString(passwordField.getPassword());
if(account.length()==0){
JOptionPane.showMessageDialog(null,"账号不能为空",
"操作提示",JOptionPane.WARNING_MESSAGE);
return;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络管理员考试高效学习方案试题及答案
- 2025年软考设计师备考心态试题及答案
- 2025年外部环境变化的风险试题及答案
- 新兴技术趋势考试试题及答案
- 软考网络管理员资格认定试题及答案
- 软件系统的性能优化策略试题及答案
- 法学概论的实务挑战与应对策略试题及答案
- 辩论热点的政经试题及答案
- 法治教育的创新实践试题及答案
- 理清VB考试思路的试题及答案
- 回收二手机免责协议书模板
- 2023年UKKA血液透析血管通路临床实践指南解读
- 2022版义务教育艺术课程标准美术新课标学习解读课件
- 完整版青少年普法宣传教育全文课件
- 陕西省探矿权采矿权使用费和价款管理办法
- CB-Z-806-2016船舶动力定位模型试验规程
- 押安徽中考数学第21题(统计与概率)(原卷版+解析)
- 浙江省杭州市杭州第二中学2023-2024学年高一下数学期末达标检测试题含解析
- DZ∕T 0248-2014 岩石地球化学测量技术规程(正式版)
- 2023年下半年软件设计师上午真题试卷
- 2024年同等学力申硕-同等学力(哲学)笔试参考题库含答案
评论
0/150
提交评论