java socket群聊_java socket来实现私聊和群聊-简易版
public class MyServer {
List list=new ArrayList();
public static void main(String[] args) {
try {
//定义服务端
//获取一个连接
new MyServer(). start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void start() throws IOException{
ServerSocket server=new ServerSocket(8888);
while(true){
Socket accept = server.accept();
MyChannel myChannel = new MyChannel(accept) ;
list.add(myChannel);
new Thread(myChannel).start();
}
}
class MyChannel implements Runnable{
private DataInputStream dis=null;
private DataOutputStream dos=null;
private boolean flag=true;
private String name=null;
private boolean sys=true;
public MyChannel(Socket server) {
try {
dis=new DataInputStream(server.getInputStream());
dos=new DataOutputStream(server.getOutputStream());
this.name=dis.readUTF();
this.send("欢迎进入聊天室");
sendOthers(this.name+"进入了聊天室",true);
} catch (IOException e) {
e.printStackTrace();
try {
dis.close();
dos.close();
this.flag=false;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public String recive() throws IOException{
String readUTF = dis.readUTF();
return readUTF;
}
public void send(String msg) throws IOException{
dos.writeUTF(msg);
dos.flush();
}
public void sendOthers(String msg,boolean sys) throws IOException{
if(msg.startsWith("@")&&msg.contains(":")){
String name1 = msg.substring(msg.indexOf("@")+1,msg.indexOf(":"));
String content =msg.substring(msg.indexOf(":")+1);
for(MyChannel m: list){
if(m.name.equals(name1)){
m.send(this.name+"对您悄悄地说"+content);
return;
}
}
}
for(MyChannel m: list){
if(m==this){
continue;
}
if(sys){
m.send("系统消息:"+msg);
}
else{
m.send(this.name+"对所有人说:"+msg);
}
}
}
@Override
public void run() {
while(flag){
try {
sendOthers(recive(),false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
dos.close();
dis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
}
java socket群聊_java socket来实现私聊和群聊-简易版相关推荐
- java群聊_Java Socket通信实现私聊、群聊
前言 闲言少叙,上代码! 代码编写 server服务端 /*** 服务端*/ public classServer {private static ServerSocket server = null ...
- java socket 线程池_java socket编程的一个例子(线程池)
服务器程序EchoServer.java: import java.io.*; import java.net.*; import java.util.concurrent.*; public cla ...
- java socket远空_JAVA Socket超时浅析
套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条 ...
- java socket 循环读取_java socket tcp(服务器循环检测)
刚才看了下以前写了的代码,tcp通信,发现太简单了,直接又摘抄了一个,运行 博客:http://blog.csdn.net/zhy_cheng/article/details/7819659 优点是服 ...
- java socket编程心跳_Java Socket编程心跳包创建实例解析
1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...
- java socket负载均衡_Java Socket分发服务负载均衡
1 1. 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接.2 a) 设备与服务器建立连接.3 b) 服务器接收到连接请求后,立即将分配好的socket服务器ip ...
- Java聊天室——实现多人聊天、私聊、群聊
客户端 package project.java; //客户端 //输入.输出流分别为处于一个线程import java.io.IOException; import java.io.PrintStr ...
- java socket 全双工客户端_java socket实现全双工通信
单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...
- java socket聊天工具_java+socket 简易聊天工具
1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...
最新文章
- jquery获取主机地址和端口
- 全面认识Eclipse中JVM内存设置
- 【转载】:C# string 特殊的引用类型
- SSL-ZYC 溜冰
- Python2、3字典比较函数
- 关于go访问rabbitmq的连接池
- zTree结合Asp.net实现异步加载数据(写的可能有点简单....)
- Mysql 存储过程实现订单流水号
- IBM服务器诊断面板
- 6、tcp_wrapper
- SQL Server 2014,表变量上的非聚集索引
- Android开发前景如何?2021年,Android开发者的前行方向
- matlab批量修改图片的大小_MATLAB实现批量处理图像图片的两种方法
- SiteFactory支持ppt一键上传
- 【java生成批次号】
- 小程序/app 商城 源码 发布(包括后台)
- echarts 地图行政区划压缩_echarts地图数据的压缩
- 一首《轨迹》,再一曲《搁浅》,满满的的回忆
- ESP32C3驱动舵机
- 网易科技《美好实验室》内容品牌发布,好产品缔造美好生活
热门文章
- jvm垃圾回收机制_JVM的垃圾回收机制总结
- php要懂函数吗,九个你需要知道的PHP函数和功能
- 如何使用线程完成售票系统
- 系统协调服务器,协调网络系统 Collaboration network system
- 【c语言】定义一个指针数组,指向5个不同的char型数组
- iphone连上wifi却上不了网_我想问问为何我的手机连上家里的wifi,可以用,但是将网线连接路由器与主机电脑时,电脑却上不了网...
- 【pytest】Hook 方法之 pytest_collection_modifyitems:修改测试用例执行顺序
- yii mysql条件查询_mysql – 在Yii2 find()/ QueryBuilder中使用WHERE条件的SELECT子查询
- 爱克发胶片_GE AGFA 胶片
- java 类编译_Java类编译、加载、和执行机制