当前位置: 首页 > news >正文

第十七节:第五部分:网络通信:TCP通信-支持与多个客户端同时通信

TCP通信-支持与多个客户端同时通信

TCP通信-支持与多个客户端同时通信

代码:

Server类(服务端)

package com.itheima.day5_TCP3;import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
* 目标:完成TCP通信快速入门-服务端开发:实现多发多收。
* */
public class Server {public static void main(String[] args) throws Exception {System.out.println("---服务端启动成功---");//1、创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);while (true) {// 2、使用serverSocket对象,调用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();System.out.println("有人上线了:"+socket.getRemoteSocketAddress());//3、把这个客户端对应的socket通信管道,交给一个独立的线程负责处理new ServerReaderThread(socket).start();}}
}

ServerReaderThread类(线程方法)

package com.itheima.day5_TCP3;import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;public class ServerReaderThread extends Thread{private Socket socket;public ServerReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true) {try {String msg = dis.readUTF();System.out.println(msg);} catch (Exception e) {System.out.println("有人下线了:"+socket.getRemoteSocketAddress());dis.close();socket.close();break;}}} catch (Exception e) {e.printStackTrace();}}
}

Client类(客户端)

package com.itheima.day5_TCP3;import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;/** 目标:完成TCP通信快速入门-客户端开发:实现客户端可以反复的发消息出去* */
public class Client {public static void main(String[] args) throws Exception {// 1、创建Socket对象,并同时请求与服务端程序的连接。Socket socket = new Socket("127.0.0.1", 8888);// 2、从socket通信管道中得到一个字节输出流,用来发数据给服务端程序。OutputStream os = socket.getOutputStream();//3、把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);//4、开始写数据出去了Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg = sc.nextLine();//一旦用户输入了exit,就退出客户端程序if ("exit".equals(msg)) {System.out.println("欢迎您下次光临!退出成功!");dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();}}
}

结果

http://www.lryc.cn/news/588169.html

相关文章:

  • 如何使用Cisco DevNet提供的免费ACI学习实验室(Learning Labs)?(Grok3 回答)
  • 笔试——Day6
  • CISSP知识点汇总- 通信与网络安全
  • 内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
  • 密码学中立方攻击的另类应用
  • 安全初级(一)
  • 多租户云环境下的隔离性保障:虚拟化、容器、安全组如何协同防护?
  • git 访问 github
  • 【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍
  • 智能Agent场景实战指南 Day 12:医疗咨询Agent设计模式
  • vue3+arcgisAPI4示例:自定义多个气泡窗口展示(附源码下载)
  • C#中发布订阅的阻塞非阻塞
  • Spring Boot + Vue2 实现腾讯云 COS 文件上传:从零搭建分片上传系统
  • QT——信号与槽
  • Zabbix在MySQL性能监控方面的运用
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十五课——基于sobel算子边缘检测的FPGA实现
  • Spring核心概念指南
  • Linux部署Mysql
  • (LeetCode 每日一题) 1290. 二进制链表转整数 (链表+二进制)
  • 微前端框架深度对决:qiankun、micro-app、wujie 技术内幕与架构选型指南
  • 艺术总监的构图“再造术”:用PS生成式AI,重塑照片叙事框架
  • 网络协议和基础通信原理
  • Bash vs PowerShell | 从 CMD 到跨平台工具:Bash 与 PowerShell 的全方位对比
  • 隐藏源IP的核心方案与高防实践
  • VNC和Socket
  • IP相关
  • 水务工程中自动化应用:EtherNet/IP转PROFIBUS DP连接超声波流量计
  • 从0到1实现Shell!Linux进程程序替换详解
  • 创客匠人谈知识变现:IP 变现的核心,在于执行闭环的落地
  • 更改elementui 图标 css content