当前位置: 首页 > 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.lryc.cn/news/614826.html

相关文章:

  • 关于开发语言的一些效率 从堆栈角度理解一部分c java go python
  • 软考 系统架构设计师系列知识点之杂项集萃(119)
  • 数据结构(9)——排序
  • QT第三讲- 机制、宏、类库模块
  • 数字图像处理基础——opencv库(Python)
  • 算法_python_牛客华为机试笔记_01
  • 【Python 高频 API 速学 ③】
  • RecyclerView 中 ViewHolder
  • TDengine IDMP 快速体验(1. 通过云服务)
  • 【CVPR2025】计算机视觉|PX:让模型训练“事半功倍”!
  • vscode/trae 的 settings.json 中配置 latex 的一些记录
  • 设备点检系统二维码的应用
  • 我用C++和零拷贝重构了文件服务器,性能飙升3倍,CPU占用降低80%
  • Amazon Linux 训练lora模型的方式
  • 《算法导论》第 14 章 - 数据结构的扩张
  • ruoyi关闭shiro校验,任何接口可以直接访问
  • C++-红黑树
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读
  • 第4章 程序段的反复执行4.2while语句P128练习题(题及答案)
  • ppt 生成视频的 ai 大模型全面解析
  • (talk)西安大模型开发者talk
  • vue+flask大模型写诗诗词推荐与可视化系统
  • 浏览器面试题及详细答案 88道(01-11)
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • AJAX与axios框架
  • Netty-Rest搭建笔记
  • 系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇
  • 轻松实现浏览器自动化——AI浏览器自动化框架Stagehand
  • 【华为机试】63. 不同路径 II