如何运用Java socket实现多人聊天室功能

导语:如何运用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编写西游记人物类

    package com.hanqi; public class XiYouJiRenWu { double height; String weapon; String name; void prine ...

  2. Java每日一讲讲什么好_撩课-Java每天10道面试题第1天

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

  3. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  4. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

  5. java中如何运行小程序_一起学java(一)——运行第一个小程序

    接下来的一段时间内会更新一起学java系列,喜欢的关注一下我吧.微信公众号:什么都不懂的大佬:初学,有错误的地方请大家多多指教. ---------------分割线-------------- 一. ...

  6. java的class怎么直接运行_如何运行Java程序和设置CLASSPAT | 中国网管联盟

    如何运行JAVA和CLASSPATH环境变量的设置是学习和使用JAVA中最基本的问题,本不应在此赘述.但近来不少人在论坛上提出的问题却与此有关,我平时碰到的一些初学者也往往在这个问题上卡了壳,因此写了 ...

  7. java 电池类类代码举例_教案:Java第7章 类的方法

    授课教师:牟勇 课时:100分钟 l 本章技能目标 n 会定义和使用类的方法 n 理解变量作用域 n 会创建包组织Java工程 n 会添加类方法的JavaDoc注释 n 会阅读JavaSE6文档 l ...

  8. java 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

  9. java程序的装载与检查_浅谈Java类型装载、连接与初始化

    类型装载.连接与初始化 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接 ...

  10. java做日历怎么对齐日期_如何使用Java日历从日期中减去X天?

    如何使用Java日历从日期中减去X天? 有人知道使用Java日历从日期中减去X天的简单方法吗? 我无法找到任何允许我直接从Java中的日期减去X天的函数. 有人能指出我正确的方向吗? 9个解决方案 2 ...

最新文章

  1. R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
  2. Java编程操作Excel的一种方法
  3. [NIKON D80]实习纪实 苏州工业之美
  4. Python基本类型-列表
  5. PyCharm修改镜像源无用?
  6. 公钥密码--Paillier
  7. spark之2:原理介绍
  8. fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解 记得收藏!
  9. JavaFX UI控件教程(十)之Scroll Bar
  10. 在Unity内使用对象池并实现线程安全的单例模式
  11. Hook Windows API调用 C++
  12. 阶段3 2.Spring_04.Spring的常用注解_1 今日课程内容介绍
  13. 银河麒麟桌面操作系统sp1 2203双硬盘ghost备份及手动分区还原
  14. 计算机网络6版,计算机网络教程(第6版)
  15. Maven异常:Could not find artifact
  16. 明星证券化之殇|一点财经
  17. 2022年全国计算机四级考试精选模拟题及答案
  18. 多智能体强化学习:基本概念,通信方式,IPPO,MADDPG
  19. 电脑常识某企业桌面虚拟化项目-Citrix虚拟桌面解决方案
  20. 【02】Java进阶:13-IO资源的处理、属性集、缓冲流、转换流、序列化、打印流、装饰设计模式、commons-io工具包

热门文章

  1. QT中使用GDAL多线程读取遥感图像到QImage
  2. 企业邮箱登录入口,企业邮箱在哪登录?邮箱ssl安全吗?
  3. 软件测试基础 (二): 集成测试
  4. 计算机休眠是意思,电脑休眠是什么意思(电脑休眠和睡眠的区别)
  5. 餐厅小票打印模板_智慧餐厅多商家入驻小程序开发,成功案例:万足外卖!
  6. 简单了解计算机组成原理 -- CPU与操作系统
  7. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26
  8. KeyError问题求助
  9. Xutils上传图片(2)
  10. ctab提取dna流程图_DNA提取(CTAB法)