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

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.xdnf.cn/news/17432.html

相关文章:

  • Linux运维新手的修炼手扎之第27天
  • 1.2.3 迅猛发展期(2020年至今)
  • 从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技
  • SQL基本
  • PAT 1052 Linked List Sorting
  • 观远BI 工具驱动零售消费行业精益增长的实践路径
  • 【线性代数】线性方程组与矩阵——(1)线性方程组与矩阵初步
  • 海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)
  • 明厨亮灶场景违规识别准确率↑32%:陌讯动态适配算法实战解析
  • Geotools核心类详解
  • 企业级web应用服务器TOMCAT入门详解
  • M8-11读卡器如何通过RS485转Profinet网关在plc写入从站地址
  • 大玄古籍制作软件【详细教程20:txt文档config自动化配置】,排版软件,自动排版,排版设计,个人出书,一键排版
  • 解决本地连接服务器ollama的错误
  • 力扣(删除有序数组中的重复项I/II)
  • 小米开源大模型 MiDashengLM-7B:不仅是“听懂”,更能“理解”声音
  • 【数据结构初阶】--文件归并排序
  • Idea配置——build system的选项区别
  • $QAXHoneypot是什么文件夹
  • 系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇
  • [Shell编程] Shell 循环结构入门
  • 2025.08.08 反转链表
  • Autosar AP中Promise和Future的异步消息通信的详细解析
  • 【设计模式】建造者模式
  • 从伪造的验证码到远程攻击工具 (RAT):2025 年网络欺骗威胁趋势
  • Dart关键字完全指南:从基础到高级用法详解
  • C++归并排序
  • 人工智能之数学基础:事件独立性
  • 登上Nature子刊,深度学习正逐渐接管基础模型
  • Docker 安装 Redis