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.pswp.cn/news/918239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

electron:vue3+vite打包案例

1、安裝electron 首先設置鏡像源,否則安裝會非常非常慢。 打開npm的配置文件。 npm config edit 修改配置項。 registryhttps://registry.npmmirror.com electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttp…

traceroute命令調試網絡

文章目錄 @[toc] 一、核心原理與參數解析 1. 工作原理 2. 關鍵參數 二、六大運維場景實戰 場景1:內網服務器無法訪問公網 場景2:跨國訪問延遲高(電商業務卡頓) 場景3:VPN分流異常(流量泄露) 場景4:檢測DNS劫持 場景5:防火墻規則驗證 場景6:云服務跨區延遲優化 三、高…

自己本地搭建的服務器怎么接公網?公網IP直連服務器方法,和只有內網IP直接映射到互聯網

? 你是不是也遇到過這樣的問題:在家里或者公司搭建了一個服務器,但是不知道怎么通過公網IP直接訪問它?別急,其實很簡單!今天就給大家分享幾種方法,手把手教你如何實現公網IP直連服務器,和無公網…

MATLAB中文亂碼的解決方法

文章目錄問題描述解決方法問題描述 對于matlab腳本輸出亂碼: ‘?����Ф����?�����й�&#xff…

工業場景反光衣識別準確率↑32%:陌訊多模態融合算法實戰解析

原創聲明本文為原創技術解析,核心數據與算法邏輯引用自《陌訊技術白皮書》,禁止任何形式的未經授權轉載。一、行業痛點:反光衣識別的場景難題在建筑施工、道路養護、倉儲物流等工業場景中,作業人員反光衣穿戴規范檢測是安全生產的…

北京JAVA基礎面試30天打卡05

一、Redis 的持久化機制有哪些?** Redis 提供兩種主要的持久化機制: ? RDB(Redis DataBase)快照持久化 定期將 Redis 中的數據以“快照”的形式寫入磁盤(生成 .rdb 文件)。啟動 Redis 時會加載 .rdb 文件恢…

深入理解 Maven POM 文件:核心配置詳解

前言 在 Java 開發領域,Apache Maven 是一個強大的項目管理和構建自動化工具。而pom.xml文件,作為 Maven 項目的“心臟”,定義了項目的方方面面。本文將帶你深入了解pom.xml中最常用和最重要的配置項,幫助你快速掌握 Maven 的核心…

嵌入式學習的第四十天-51單片機

一、基本框架第一階段:1980年、Intel英特爾MCS-51系列:8051型號單片機、工業控制領域、由MCU市場->CPU市場。1、CPU(Central Processing Unit,中央處理單元)?是計算機的核心部件,負責執行計算機指令和處…

Linux(17)——Linux進程信號(上)

目錄 一、信號速識 ??生活中的信號 ??技術上的信號 ??信號的發送和記錄 ??信號處理概述 二、產生信號 ??通過終端產生信號 ??通過函數發送信號 ??通過軟件產生信號 ??通過硬件產生信號 一、信號速識 ??生活中的信號 你在網上買了很多件商品&…

使用pytest對接口進行自動化測試

上篇博客中講述了什么是接口測試,已經自動化接口測試流程,這篇博客總結如何實現接口自動化測試(一)requestsrequests庫是Python對HTTP通信的一個工具,將http協議操作封裝成簡單的接口,能夠讓我們高效的編寫…

信息安全及防火墻總結

1.1 信息安全現狀及挑戰信息安全概述 信息安全:防止任何對數據進行未授權訪問的措施,或者防止造成信息有意無意泄漏、破壞、 丟失等問題的發生,讓數據處于遠離危險、免于威脅的狀態或特性。 網絡安全:計算機網絡環境下的信息安全。…

20250808組題總結

A - A Pak Chanek 有一個包含 nnn 個正整數的數組aaa。由于他正在學習如何計算兩個數字的向下取整平均值,他希望在他的數組 aaa 上進行練習。當數組 aaa 至少有兩個元素時,Pak Chanek 將執行以下三步操作: ?\bullet?選擇兩個不同的索引 ii…

【Python 語法糖小火鍋 · 第 5 涮 · 完結】

一、糖味一句話 Python 3.10 的 match-case 把「類型 值 嵌套」一次性拆開, 可讀性 10,bug 數 10,if-elif 可以安心退休了。二、1 行示例 3 連發 # ① 值匹配 match status:case 200: msg "ok"case 404: msg "not found&q…

寫 SPSS文件系統

寫入 SPSS 系統文件(.sav、.zsav) 以下為相關的 SPSS 命令(以大寫形式 CAPS 呈現) savFileName : str SPSS 數據文件的文件名 以 .sav 結尾的文件使用舊版壓縮方案壓縮。 以 _uncompressed.sav 結尾的文件不壓縮,這在需…

云服務器--阿里云OSS(1)【阿里云OSS簡單介紹以及環境準備】

一、阿里云OSS簡介 定義:阿里云OSS(Object Storage Service)是阿里云提供的對象存儲服務,支持海量數據的存儲和管理。 存儲方式:基于“對象存儲”,文件以對象形式存儲,無需管理文件系統結構。 …

R語言代碼加密(1)

1、使用Compiler包library(compiler) cmpfile("1.R")#實現對R腳本的整體加密 compiler::loadcmp("1.Rc")#調用R腳本存在問題是,該方法僅對腳本進行加密。在加載生成的Rc文件后,腳本內具體函數,是可以看到具體內容的。針對…

【面試場景題】通過LinkedHashMap來實現LRU與LFU

文章目錄一、LRU與LFU的概念1. LRU(Least Recently Used,最近最少使用)2. LFU(Least Frequently Used,最不經常使用)二、LinkedHashMap的特性三、用LinkedHashMap實現LRU實現代碼:原理說明&…

第5章 Excel公式與函數應用指南(2):數學函數

5.2 數學函數 Excel作為強大的數據處理工具,其內置的數學函數體系為用戶提供了豐富的計算能力。從基礎的四則運算到復雜的指數對數計算,從簡單的數值舍入到專業的矩陣運算,Excel的數學函數幾乎可以滿足各類計算需求。 本節將重點為您解析七個常用且實用的數學函數:求和函…

mysql復制連接下的所有表+一次性拷貝到自己的庫

1.導出鏈接下的所有數據mysqldump -h 地址 -u 數據庫名 -p --all-databases --single-transaction --master-data2 > all_dbs.sql2.導入自己的庫mysql -h 127.0.0.1 -u root -p < all_dbs.sql3.指定導出某些庫mysqldump -u root -p --databases db1 db2 db3 > /path/t…

開發手札:UnrealEngine和Unity3d坐標系問題

最近把一套網絡模塊和一套組件模塊從u3d改造到ue4。網絡模塊通用性很高&#xff0c;畢竟協議都是通用網絡協議&#xff0c;改造后沒啥問題。但是改造組件模塊的時候就遇到了問題。首先&#xff0c;unity3d的坐標系是標準左手坐標系&#xff0c;如下&#xff1a;同時自己的幾何算…