Java Socket通信之聊天室功能
作者:LY_624 发布时间:2022-02-04 11:47:35
标签:Java,Socket,聊天室
本文实例为大家分享了Java Socket聊天室功能的具体代码,供大家参考,具体内容如下
Client.java
import java.io.*;
import java.net.*;
import java.util.*;
public class Client {
public int port = 8083;
Socket socket = null;
public static void main(String[] args) {
new Client(); //开始执行
}
public Client() {
try {
socket = new Socket("127.0.0.1", port);
new Cthread().start();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg1;
while ((msg1 = br.readLine()) != null) {
System.out.println(msg1);
}
} catch (Exception e) {
}
}
class Cthread extends Thread {
public void run() {
try {
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
String msg2;
while (true) {
msg2 = re.readLine();
pw.println(msg2);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Server.java
import java.net.*;
import java.io.*;
import java.util.*;
public class Server {
int port;
List<Socket> clients;
ServerSocket server;
public Server() {
try {
port = 8083;
clients = new ArrayList<Socket>();
server = new ServerSocket(port);
System.out.println("服务器已启动");
int co=1;
while (true) {
Socket socket = server.accept();
clients.add(socket);
Mythread mythread = new Mythread(socket,co);
co++;
mythread.start();
}
} catch (Exception ex) {
System.out.println("vv");
}
}
public static void main(String[] args) {
new Server();
}
class Mythread extends Thread {
Socket ssocket;
private int count;
private BufferedReader br;
private PrintWriter pw;
public String msg;
public Mythread(Socket s,int c) {
ssocket = s;
count=c;
}
public void run() {
try {
br = new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
msg = "欢迎【" +"Client "+count + "】进入聊天室!当前聊天室有【" + clients.size() + "】人";
sendMsg();
while ((msg = br.readLine()) != null) {
msg = "【" +"Client "+count + "】说:" + msg;
sendMsg();
}
} catch (Exception ex) {
}
}
public void sendMsg() {
try {
System.out.println(msg);
for (int i = clients.size() - 1; i >= 0; i--) {
pw = new PrintWriter(clients.get(i).getOutputStream(), true);
pw.println(msg);
pw.flush();
}
} catch (Exception ex) {
}
}
}
}
运行结果:
来源:http://blog.csdn.net/LY_624/article/details/53784612


猜你喜欢
- 一、树1.1 概念与线性表表示的一一对应的线性关系不同,树表示的是数据元素之间更为复杂的非线性关系。直观来看,树是以分支关系定义的层次结构。
- 本文,将介绍如何通过Java后端程序代码在PDF中创建工具提示。添加工具提示后,当鼠标悬停在页面上的元素时,将显示工具提示内容。导入jar包
- 1. 配置MailPlugin插件public void configPlugin(PluginLoader pluginLoader) {
- 监听模式事件模型实现了监听模式,监听模式简单来说就是事件源经过事件的封装传给 * ,当事件源触发事件后, * 接收到事件对象可以回调事件的方
- mybatis-plus 查询传入参数Map,返回List<Map>原因有时实体类属性不够用,又不想写自定义VO了,所以用map
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例讲述了Android基于ViewPager+Fragment实现左右滑屏效果的方法。分享给大家供大家参考,具体如下:1.xml布局模
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 前言Activity可以获取运行中的应用信息,可以获取到servcie,process,app,memory,Task信息等。获取信息Act
- Gateway什么是Gateway  由于Netflix的zuul发生问题,spring公司自己研发了一
- 项目要用到弹出框,还要和苹果的样式一样(Android真是没地位),所以就自己定义了一个,不是很像(主要是没图),但是也还可以。废话不多说了
- 小程序获取手机号,后端JAVA解密流程代码微信官方文档获取手机号流程地址,先看下最好方便理解下面步骤实现思路,步骤如下1.前端需先调用官方w
- 本文实例讲述了Android编程计算函数时间戳的相关方法。分享给大家供大家参考,具体如下:对于做性能的人来说,知道时间的花在哪了是比较重要的
- 前言RecyclerView是我们常用的列表控件,一般来说当Item的数据改变的时候我们需要刷新当前的Item 。如何刷新 RV 的列表?基
- 本文实例讲述了C++实现的求解多元一次方程。分享给大家供大家参考,具体如下:注:这里计算的是n*n的等距矩阵,代码如下:#include&l
- 目录背景原因分析setLoadWithOverviewMode端内其他地方排查总结WebView 字体常见的其他坑手机设置字体大小导致h5页
- maven项目中在pom.xml中依赖2个jar包,其他的spring的jar包省略:<dependency> &
- 本文详细总结了Android编程开发之性能优化技巧。分享给大家供大家参考,具体如下:1.http用gzip压缩,设置连接超时时间和响应超时时
- 本文实例讲述了C#读取或设置ScrollLock状态的方法。分享给大家供大家参考。具体如下:C#读取或者设置ScrollLock状态,允许滚
- 前言在使用IDEA2020.2.3版本时,创建web工程遇到了一些问题,经过一番摸索之后得到解决方案。一、新建javaweb工程1.先创建一