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

Java基础-TCP通信单服务器接受多客户端

目录

案例要求:

实现思路:

代码:

User类:用户端

Client类:服务端

ServerReader类:多线程通信类

总结:


案例要求:

TCP通信下,正常的写法只能单个服务器和单个客户端进行通信,那该怎么解决这个问题呢?

实现思路:

有客户端进行通信就创建一个线程即可,用多线程解决单通信问题

代码:

User类:用户端

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
import java.util.Scanner;public class User {public static void main(String[] args) throws Exception {Socket socket = new Socket("127.0.0.1", 8888);System.out.println("客户端启动");OutputStream out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg= sc.nextLine();if(msg.equals("exit")){dos.close();socket.close();break;}dos.writeUTF(msg);}}
}

Client类:服务端

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;public class Client {public static void main(String[] args) throws  Exception{System.out.println("服务端启动了...");ServerSocket serverSocket = new ServerSocket(8888);Socket socket = null;while (true) {socket = serverSocket.accept();System.out.println("一个客户端上线了:"+socket.getInetAddress().getHostAddress());new ServerReader(socket).start();}}
}

ServerReader类:多线程通信类

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;public class ServerReader extends  Thread{private Socket socket;public ServerReader(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream in = socket.getInputStream() ;DataInputStream dis = new DataInputStream(in);while (true) {String msg=dis.readUTF();System.out.println("收到用户端的消息:"+msg);String ip=socket.getInetAddress().getHostAddress();String port=socket.getPort()+"";System.out.println("ip:"+ip+" port:"+port);}} catch (Exception e) {System.out.println("一个客户端下线了:"+socket.getInetAddress().getHostAddress());}}
}


总结:

摘要:本文介绍了使用多线程解决TCP单通信问题的方案。通过创建User类作为客户端,Client类作为服务端主程序,以及ServerReader类作为多线程处理类,实现了服务端同时处理多个客户端连接。当新客户端连接时,服务端会为每个连接创建独立线程来处理通信,从而突破单客户端限制。该方案有效解决了传统TCP通信中服务端只能处理单个连接的问题,实现了多客户端并发通信的功能。

http://www.dtcms.com/a/322434.html

相关文章:

  • Pytorch模型复现笔记-FPN特征金字塔讲解+架构搭建(可直接copy运行)+冒烟测试
  • 强光干扰下误报率↓82%!陌讯多模态算法在睡岗检测的落地优化
  • 力扣 hot100 Day70
  • Linux高级编程-文件操作
  • 人类语义认知统一模型:融合脑科学与AI的突破
  • 工业场景反光衣识别准确率↑32%:陌讯多模态融合算法实战解析
  • Leetcode——556. 下一个更大元素 III
  • 重读《人件》Peopleware -(23)Ⅲ 适当人选 Ⅵ 乐在其中(下)
  • QT第三讲- 机制、宏、类库模块
  • 从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技
  • Spring Boot 2 集成 Redis 集群详解
  • 全栈:JDBC驱动版本和SQLserver版本是否有关系?怎么选择JDBC的版本号?
  • Spring 的原理探究
  • Java 大视界 -- Java 大数据在智能医疗手术机器人操作数据记录与性能评估中的应用(390)
  • 【Bluedroid】A2DP Sink音频焦点管理机制解析(update_audio_focus_state)
  • 【RabbitMQ】高级特性—事务、消息分发详解
  • 【n8n】学习n8n【10】:Github的项目n8n-workflows:本地安装2,053 个 n8n 工作流程集合:随时看随时抄/学习~
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究
  • Python训练Day38
  • Nginx 反向代理与负载均衡架构
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的学习型社群构建与运营模式创新研究
  • 深度学习中基于响应的模型知识蒸馏实现示例
  • 开发手札:UnrealEngine和Unity3d坐标系问题
  • K-means聚类学习:原理、实践与API解析
  • AI大语言模型在生活场景中的应用日益广泛,主要包括四大类需求:文本处理、信息获取、决策支持和创意生成。
  • 《Learning To Count Everything》论文阅读
  • 动态路由菜单:根据用户角色动态生成菜单栏的实践(包含子菜单)
  • 使用加密技术实现个人密码本保护
  • try/catch/throw 简明指南
  • orcad的操作(1)