导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网。

目录结构:

ChatClient:

package com.panda.chat;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

@SuppressWarnings("serial")

public class ChatClient extends Frame {

private TextArea ta = new TextArea();

private TextField tf = new TextField();

private DataOutputStream dos = null;

private DataInputStream dis = null;

private Socket socket = null;

private boolean bConnected = false;

private Thread thread=null;

public static void main(String[] args) {

new ChatClient().frameClient();

}

public void frameClient(){

setSize(400, 400);

setLocation(400,300);

add(ta,BorderLayout.NORTH);

add(tf,BorderLayout.SOUTH);

pack();

tf.addActionListener(new TfListener());

//关闭窗口事件监听

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

disconnected();

System.exit(0);

}

});

this.connect();

setVisible(true);

}

//链接服务器地址

private void connect(){

try {

socket = new Socket("127.0.0.1", 8888);

thread=new Thread(new ChatThread());

thread.start();

dos = new DataOutputStream(socket.getOutputStream());

dis = new DataInputStream(socket.getInputStream());

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//断开连接

private void disconnected(){

bConnected = false;

try {

dos.close();

dis.close();

socket.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

//键盘回车事件

private class TfListener implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

String strMsg = tf.getText();

tf.setText("");

try {

dos.writeUTF(strMsg);

dos.flush();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

//开启线程接受服务器信息

private class ChatThread implements Runnable{

@Override

public void run() {

try {

bConnected = true;

while(bConnected){

String msg = dis.readUTF();

String taText = ta.getText();

ta.setText(taText+msg+"\n");

}

} catch (SocketException e) {

System.out.println("退出");;

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

ChatServer:

package com.panda.chat;

import java.io.*;

import java.net.*;

import java.util.*;

public class ChatServer {

private boolean started = false;

private List chatThreads = new ArrayList();

public static void main(String[] args) {

new ChatServer().startServer();

}

private void startServer(){

try {

//开启服务端Socket

ServerSocket seso = new ServerSocket(8888);

started = true;

while(started){

//接受客户端连接请求

Socket sos = seso.accept();

System.out.println("一个客户端已连接");

//开启线程处理客户端通信

ChatThread ct = new ChatThread(sos);

chatThreads.add(ct);

new Thread(ct).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

private class ChatThread implements Runnable{

private Socket socket;

private DataInputStream din=null;

private DataOutputStream don=null;

private boolean bConnected = false;

public ChatThread(Socket socket) {

super();

this.socket = socket;

}

//发送信息的函数

private void send(String strMsgIn){

try{

don.writeUTF(strMsgIn);

don.flush();

}catch(IOException e){

e.printStackTrace();

}

}

@Override

public void run() {

try{

din = new DataInputStream(socket.getInputStream());

don = new DataOutputStream(socket.getOutputStream());

//读取数据

bConnected = true;

while(bConnected){

String strMsgIn = din.readUTF();

System.out.println(strMsgIn);

//接收到数据后发送给每个客户端

for(int i =0;i

chatThreads.get(i).send(strMsgIn);

}

}

}catch (IOException e) {

try {

//如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程

socket.close();

chatThreads.remove(this);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

} finally{

try {

din.close();

don.close();

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

运行ChatSever后,再同时打开多次ChatClient,就可以实现多人聊天了,你也试试。

java socket多人聊天_如何运用Java socket实现多人聊天室功能相关推荐

  1. 有谁转行学java成功了的吗_转行学习java靠谱吗?

    转行学Java靠谱吗?靠不靠谱主要还是看你自己是否想要学好Java技术,是否想要从事这方面的岗位工作,如果你已经有了这个决心,那么自然而然什么都不会问题.无论我们学Java是兴趣还是想要通过学好Jav ...

  2. java工程师有什么要求_什么是java,java工程师应该具备哪些能力?

    这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...

  3. java带参数的构造方法_看了Java的Class的源码,我自闭了

    作者丨chenweicool 来源:https://www.cnblogs.com/chentang/p/13170081.html 1.class这个类是什么 Class的本质也是一个类,只不过它是 ...

  4. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  5. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  6. java线上问题定位_线上java.lang.OutOfMemoryError问题定位三板斧

    OOM(OutOfMemoryError) 问题归根结底三点原因: 本身资源不够 申请的内存太多 资源耗尽 解决思路,换成Java服务分析,三个原因也可以解读为: 有可能是内存分配确实过小,而正常业务 ...

  7. java 面试题合集_撩课-Java面试题合辑1-50题

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  8. java怎么提升编程能力_怎样提升java编程能力

    1 怎样提升java编程能力 在互联网迅猛发展的时代,而我们如果对互联网一无所知,那就相当于文盲.所以很多人都想去了解它,去学习他.而作为互联网的产物--java,是一门非常不错的技术,学精通之后,你 ...

  9. java开发工程师报名费多少_都说Java工程师的薪资比较高,事实真是如此吗?

    作为IT行业中的热门编程语言,Java不仅可以胜任很多工作岗位,在薪资方面也非常具有竞争优势.因此,Java开发是不少人转行的首选.很多想要学习Java的人都会问,在武汉Java学习后能拿多少工资?可 ...

最新文章

  1. adaptiveThreshold 阈值化的实现
  2. 微软(北京).NET俱乐部 2008雪上激情之旅-续
  3. 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
  4. Python 技术篇-将python项目打包成exe独立运行程序,pyinstaller库打包python代码实例演示
  5. SCP传输文件和断点续传
  6. TOMCAT启动到一半停止如何解决
  7. dram和nand哪个难生产_仅300名员工,年产7台,订单排到5年后,比光刻机还难买...
  8. Windows 10环境下AndroidStudio安装教程(内含如何配置Http Proxy)
  9. 3_数据分析—数据清洗及特征处理
  10. 新版开发工具?全新智能设备?华为开发者大会2021(Together)来了!
  11. ffmpeg主要数据结构及其之间的关系
  12. 【TWVRP】基于matlab遗传算法求解送货且带时间窗的车辆路径规划问题【含Matlab源码 1074期】
  13. 人工神经网络理论及应用第三章课后题答案
  14. 数字选择器NumberPicker使用教程
  15. Linux下PHP下载安装
  16. java.lang.exceptionininitializererror_java.lang.ExceptionInInitializerError异常的解决方法
  17. android img 文件解包
  18. 新零售系统mysql设计(评价表)
  19. android 九宫格图片选择(微信朋友圈) 图片预览 (底部recycleview 不卡顿)
  20. SAP工具箱 配置导入模板

热门文章

  1. echart 设置y轴间隔_分割ECharts的y轴并设置坐标轴间隔
  2. SW-X框架 的安装与部署
  3. Rubymine 无法Debug的方法
  4. 最牛版主力资金指标公式_通达信公式
  5. php5.6之php-fpm优化
  6. Netty网络编程实战3,使用Netty远程传输文件
  7. Python写捕鱼达人
  8. Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定
  9. 【哈士奇赠书活动 - 20期】-〖从程序员到架构师〗
  10. Mac苹果电脑MacBook Air、MacBook Pro怎么安装win10双系统或Windows软件