java socket多人聊天_如何运用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实现多人聊天室功能相关推荐
- 有谁转行学java成功了的吗_转行学习java靠谱吗?
转行学Java靠谱吗?靠不靠谱主要还是看你自己是否想要学好Java技术,是否想要从事这方面的岗位工作,如果你已经有了这个决心,那么自然而然什么都不会问题.无论我们学Java是兴趣还是想要通过学好Jav ...
- java工程师有什么要求_什么是java,java工程师应该具备哪些能力?
这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...
- java带参数的构造方法_看了Java的Class的源码,我自闭了
作者丨chenweicool 来源:https://www.cnblogs.com/chentang/p/13170081.html 1.class这个类是什么 Class的本质也是一个类,只不过它是 ...
- java中注解的解析_全面解析Java中的注解与注释
注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- java线上问题定位_线上java.lang.OutOfMemoryError问题定位三板斧
OOM(OutOfMemoryError) 问题归根结底三点原因: 本身资源不够 申请的内存太多 资源耗尽 解决思路,换成Java服务分析,三个原因也可以解读为: 有可能是内存分配确实过小,而正常业务 ...
- java 面试题合集_撩课-Java面试题合辑1-50题
1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...
- java怎么提升编程能力_怎样提升java编程能力
1 怎样提升java编程能力 在互联网迅猛发展的时代,而我们如果对互联网一无所知,那就相当于文盲.所以很多人都想去了解它,去学习他.而作为互联网的产物--java,是一门非常不错的技术,学精通之后,你 ...
- java开发工程师报名费多少_都说Java工程师的薪资比较高,事实真是如此吗?
作为IT行业中的热门编程语言,Java不仅可以胜任很多工作岗位,在薪资方面也非常具有竞争优势.因此,Java开发是不少人转行的首选.很多想要学习Java的人都会问,在武汉Java学习后能拿多少工资?可 ...
最新文章
- adaptiveThreshold 阈值化的实现
- 微软(北京).NET俱乐部 2008雪上激情之旅-续
- 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
- Python 技术篇-将python项目打包成exe独立运行程序,pyinstaller库打包python代码实例演示
- SCP传输文件和断点续传
- TOMCAT启动到一半停止如何解决
- dram和nand哪个难生产_仅300名员工,年产7台,订单排到5年后,比光刻机还难买...
- Windows 10环境下AndroidStudio安装教程(内含如何配置Http Proxy)
- 3_数据分析—数据清洗及特征处理
- 新版开发工具?全新智能设备?华为开发者大会2021(Together)来了!
- ffmpeg主要数据结构及其之间的关系
- 【TWVRP】基于matlab遗传算法求解送货且带时间窗的车辆路径规划问题【含Matlab源码 1074期】
- 人工神经网络理论及应用第三章课后题答案
- 数字选择器NumberPicker使用教程
- Linux下PHP下载安装
- java.lang.exceptionininitializererror_java.lang.ExceptionInInitializerError异常的解决方法
- android img 文件解包
- 新零售系统mysql设计(评价表)
- android 九宫格图片选择(微信朋友圈) 图片预览 (底部recycleview 不卡顿)
- SAP工具箱 配置导入模板
热门文章
- echart 设置y轴间隔_分割ECharts的y轴并设置坐标轴间隔
- SW-X框架 的安装与部署
- Rubymine 无法Debug的方法
- 最牛版主力资金指标公式_通达信公式
- php5.6之php-fpm优化
- Netty网络编程实战3,使用Netty远程传输文件
- Python写捕鱼达人
- Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定
- 【哈士奇赠书活动 - 20期】-〖从程序员到架构师〗
- Mac苹果电脑MacBook Air、MacBook Pro怎么安装win10双系统或Windows软件