java如何实现群聊_Java实现通过服务器实现客户端之间的简单群聊
描述:
使用了socket编程。主要是通过服务器监听端口,对于新访问的客户端建立一个socket长连接。每次客户端输入信息,先传到服务器,再由服务发给在线的客户端。
其功能模型如下:
运行截图:
1、需要先启动服务器端,界面如下:
2、启动2或2个以上个客户端(名字随机):
3、聊天结果:
代码部分:
服务器端代码实现:
package pack2;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.awt.Container;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class chatServer extends JFrame{
/**
*
*/
private static final long serialVersionUID = -4929211394401993088L;
static JTextArea textArea;
ListsocketList;
ServerSocket serverSocket;
Socket socket = null;
public chatServer()throws IOException{
this.setTitle("Server");
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setBounds(0, 0, 300, 510);
this.setResizable(false);
this.setLocation(710,200);
this.setVisible(true);
System.out.println("Sever started!!!");
serverSocket = new ServerSocket(2345);
socketList = new ArrayList();
socket = null;
while (true) {
socket = serverSocket.accept();
System.out.println("Clinet connected to the server!");
socketList.add(socket);
new listening(socket, socketList).start();
}
}
void init(){
Container con = this.getContentPane();
textArea=new JTextArea();
textArea.setBounds(5, 5, 285,440);
textArea.setEditable(false);
con.add(textArea);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
scrollPane.setBounds(5, 5, 285,440);
con.add(scrollPane);
}
public static void main(String[] args) throws IOException{
new chatServer();
}
}
class listening extends Thread{
private Socket socket;
private ListsocketList;
public listening(Socket socket, ListsocketList) {
this.socket = socket;
this.socketList = socketList;
}
@Override
public void run() {
DataInputStream in;
DataOutputStream out;
try {
in=new DataInputStream(socket.getInputStream());
String news;
while(true){
news = in.readUTF();
chatServer.textArea.append(news+"\n");
for(int i=0;i
客户端代码实现:
package pack2;
import java.net.*;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class chatClient extends JFrame implements Runnable,ActionListener{
/**
*
*/
private static final long serialVersionUID = -7103711638195532808L;
DataInputStream in;
DataOutputStream out;
Socket socket;
String name,ipAdress;
JTextField textField;
JTextArea textArea;
JButton button;
public chatClient(String name){
this.name=name;
//this.ipAdress=ipAdress;
this.setTitle("我是 "+name);
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setBounds(0, 0, 300, 510);
this.setResizable(false);
this.setLocation(400, 200);
this.setVisible(true);
try {
socket=new Socket(this.ipAdress,2345);
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {}
}
@Override
public void run() {
try{
while(true){
textArea.append(in.readUTF()+"\n");
}
}catch(Exception e){}
}
void init(){
Container con = this.getContentPane();
button=new JButton("Send");
button.setBounds(225,450,65,20);
button.addActionListener(this);
con.add(button);
textField=new JTextField();
textField.setBounds(5,450,215,20);
textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
try {
out.writeUTF(textField.getText());
textField.setText("");
} catch (IOException e2) {}
}
}
});
con.add(textField);
textArea=new JTextArea();
textArea.setBounds(5, 5, 285,440);
textArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBorder(null);
scrollPane.setBounds(5, 5, 285,440);
con.add(scrollPane);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==button)
try {
out.writeUTF(this.name+": "+textField.getText());
textField.setText("");
} catch (IOException e2) {}
}
public static void main(String[] args) {
String []name = {"刘一","陈二","张三","李四","王五","赵六","孙七","周八","吴九","郑十"};
java.util.Random random=new java.util.Random();
int result=random.nextInt(10);
new Thread(new chatClient(name[result])).start();
}
}
java如何实现群聊_Java实现通过服务器实现客户端之间的简单群聊相关推荐
- java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
- java服务端代码_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
- java http 下载网页代码_Java下http下载文件客户端和上传文件客户端实例代码
Java下http下载文件客户端和上传文件客户端实例代码 发布于 2021-1-14| 复制链接 摘记: 一.下载客户端代码 ```java package javadownload; import ...
- JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- java中集合的区别_Java中的集合与集合之间的区别
Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...
- java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?
随着时代的不断进步与发展,人们对于科学技术的使用也越来越普遍化.人们都开始自己学习编程语言以更好的适应时代的发展.今天就来为大家介绍一下,java中监听一个客户端怎么做?监听多个怎么做?一起来看看吧. ...
- java base64字符 转图片_JAVA实现图片与base64字符串之间的转换详解
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- java linux命令远程执行_java执行远程服务器上的shell命令
所需jar包,commons-io-2.6.jar, ganymed-ssh2-262.jar import ch.ethz.ssh2.ChannelCondition; import ch.ethz ...
- java integer转成负数_Java 十进制和十六制之间的转化(负数的处理)
在一些情况下,我们需要将数字在十进制和十六制下互相转化. 在Java中将十进制转化成十六进制非常的简单. int var = 324; String hex = Integer.toHexString ...
最新文章
- 计算机组原理ppt,计算机组原理第三章.ppt
- 多重采样和超级采样哪个流畅_OpenGL多重采样:结果与未使用多重采样时的结果相同...
- python程序开发_用python进行桌面程序开发
- 服务器系统bios,服务器bios下查看系统配置
- 【Vegas原创】SQL Server 2005部署备份任务
- 深入剖析Android音频(二)AudioSystem
- Java写的斗地主游戏源码
- 发言倒计时器_北京会议发言计时器 会议发言提醒器 赛事发言倒计时器
- OAuth2资源服务器
- ZeroMQ文档白嫖:一文述完ZeroMQ的套接字选项
- 吹气球--记忆化搜索
- android仿京东跑马灯,RecyclerView实现跑马灯效果
- 苹果犯了“围师必阙”大忌
- ios表格添加底纹_如何在Word中的表格单元格中添加底纹
- LittleFS移植实践
- 获取微信QQ好友高精地址
- 网络工程师,网络运维常用命令
- 计算机的任务管理器不显示不出来,任务管理器显示不全,小编教你电脑任务管理器显示不全怎么解决...
- 【天线基础-天线原理、定义和分类】
- 2022年跨境电商卖家必知的黑色星期五营销策略