博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
客户端与服务器通信(版本5)
阅读量:3963 次
发布时间:2019-05-24

本文共 3978 字,大约阅读时间需要 13 分钟。

在之前的基础上实现了群聊 可以设置多个客户端

客户端

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息//多个客户端   一个服务器public class Client051 {
static Scanner sc = new Scanner(System.in); static Socket socket; public static void main(String[] args) {
//创建客户端套接字 用户交互服务器 try {
socket = new Socket("127.0.0.1", 8005); System.out.println("客户端1开启"); //根据套接字获取输出流 把信息从内存拿出来就是输出 写进内存就是输入 new Thread(()->{
while (true) {
try {
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String s = null; s = dataInputStream.readUTF(); System.out.println(s); } catch (IOException e) {
e.printStackTrace(); } } //获取服务端发过来的消息 }).start(); while (true) {
OutputStream outputStream = socket.getOutputStream(); //将字节输出流包装成数据字节输出 DataOutputStream dataOutputStream = new DataOutputStream(outputStream); dataOutputStream.flush(); //这行代码的确定缺点 程序会阻塞在这里等待输入 dataOutputStream.writeUTF("客户端1说:"+sc.next()); } } catch (IOException e) {
e.printStackTrace(); } }}

服务器

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息//多个客户端   一个服务器public class Server05 {
//定义集合用来存放每一个客户端socket private static List
socketList = new ArrayList<>(); static Scanner sc = new Scanner(System.in); static ServerSocket serverSocket; static Socket socket; public static void main(String[] args) {
try {
//创建服务端套接字ServerSocket 并指定端口号 serverSocket = new ServerSocket(8005); System.out.println("-------------------服务器开启-------------------"); //主线程用来不停的监听客户端 把客户端放进集合保存起来 while (true) {
try {
socket = serverSocket.accept();//因为我们要监听多个客户端 所以要将它放在循环里面 当客户端端建立连接后继续往下运行 socketList.add(socket);//有人连接到服务器 就将它的socket保存到list集合里面去 System.out.println("当前在线人数为:"+socketList.size());//用来记录与服务器连接的客户端数量 //创建一个新的线程不停的获取数据然后发送给每一个客户端 new Thread(()->{
boolean flag = false; Socket mySelf = null; while (true) {
try {
if(!flag) {
mySelf = socket;//保证当前线程只拿到一个socket flag = true; } DataInputStream dataInputStream = new DataInputStream(mySelf.getInputStream()); String s = dataInputStream.readUTF(); for (Socket socketTemp : socketList) {
if(mySelf == socketTemp) {
continue; } DataOutputStream dataOutputStream = new DataOutputStream(socketTemp.getOutputStream()); dataOutputStream.writeUTF(s); dataOutputStream.flush(); } } catch (IOException e) {
e.printStackTrace(); } } }).start(); } catch (IOException e) {
e.printStackTrace(); } } } catch (IOException e) {
e.printStackTrace(); } }}

转载地址:http://omhzi.baihongyu.com/

你可能感兴趣的文章
采用动态代理对事务进行封装
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>