javaGUI实现多人聊天功能_第1页
javaGUI实现多人聊天功能_第2页
javaGUI实现多人聊天功能_第3页
javaGUI实现多人聊天功能_第4页
javaGUI实现多人聊天功能_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论