描述:

使用了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实现通过服务器实现客户端之间的简单群聊相关推荐

  1. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  2. java服务端代码_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  3. java http 下载网页代码_Java下http下载文件客户端和上传文件客户端实例代码

    Java下http下载文件客户端和上传文件客户端实例代码 发布于 2021-1-14| 复制链接 摘记: 一.下载客户端代码 ```java package javadownload; import ...

  4. JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  5. java中集合的区别_Java中的集合与集合之间的区别

    Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...

  6. java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?

    随着时代的不断进步与发展,人们对于科学技术的使用也越来越普遍化.人们都开始自己学习编程语言以更好的适应时代的发展.今天就来为大家介绍一下,java中监听一个客户端怎么做?监听多个怎么做?一起来看看吧. ...

  7. java base64字符 转图片_JAVA实现图片与base64字符串之间的转换详解

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  8. java linux命令远程执行_java执行远程服务器上的shell命令

    所需jar包,commons-io-2.6.jar, ganymed-ssh2-262.jar import ch.ethz.ssh2.ChannelCondition; import ch.ethz ...

  9. java integer转成负数_Java 十进制和十六制之间的转化(负数的处理)

    在一些情况下,我们需要将数字在十进制和十六制下互相转化. 在Java中将十进制转化成十六进制非常的简单. int var = 324; String hex = Integer.toHexString ...

最新文章

  1. 计算机组原理ppt,计算机组原理第三章.ppt
  2. 多重采样和超级采样哪个流畅_OpenGL多重采样:结果与未使用多重采样时的结果相同...
  3. python程序开发_用python进行桌面程序开发
  4. 服务器系统bios,服务器bios下查看系统配置
  5. 【Vegas原创】SQL Server 2005部署备份任务
  6. 深入剖析Android音频(二)AudioSystem
  7. Java写的斗地主游戏源码
  8. 发言倒计时器_北京会议发言计时器 会议发言提醒器 赛事发言倒计时器
  9. OAuth2资源服务器
  10. ZeroMQ文档白嫖:一文述完ZeroMQ的套接字选项
  11. 吹气球--记忆化搜索
  12. android仿京东跑马灯,RecyclerView实现跑马灯效果
  13. 苹果犯了“围师必阙”大忌
  14. ios表格添加底纹_如何在Word中的表格单元格中添加底纹
  15. LittleFS移植实践
  16. 获取微信QQ好友高精地址
  17. 网络工程师,网络运维常用命令
  18. 计算机的任务管理器不显示不出来,任务管理器显示不全,小编教你电脑任务管理器显示不全怎么解决...
  19. 【天线基础-天线原理、定义和分类】
  20. 2022年跨境电商卖家必知的黑色星期五营销策略

热门文章

  1. 红石外汇|每日汇评:CPI数据压垮美元,日元坚守阵地
  2. android 7 评测,[图]iPhone 7/7 Plus性能评测:碾压Android旗舰
  3. 8个前端开发的独特技巧
  4. Java框架学习笔记
  5. Centos安装onedrive
  6. 高并发 限流,到底限的什么鬼 (精品长文)
  7. 目前Google推出的服务(ZZ)
  8. android 第二行代码 源码
  9. 推箱子游戏 java_Java实现推箱子游戏
  10. 图片压缩大小电脑怎么操作?3秒教你图片怎么压缩大小