java:(二/基于socket的多客户端连接)

java多线程实现多客户端socket通信 一、服务端 package com.czhappy.hello.socket; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { public static v... 阅读详情

其实就是让服务端不断监听客户端连接,一旦有请求则使用多线程单独处理客户端请求,主线程继续监视客户端连接


服务端:

package demo_Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) {
		try {
			// 1,创建一个服务器端socket,即serverSocket,指定绑定的端口,并监听
			ServerSocket serversocket = new ServerSocket(9978);
			// 2,使用accept()方法监听,等待客户端链接
			Socket socket = null;
			long count = 0;
			System.out.println("服务器正在启动,等待客户端连接..");
			while (true) {
				// 用循环不断监听客户端连接
				socket = serversocket.accept();
				// 创建新线程
				ServerThread serverThread = new ServerThread(socket);
				// 启动线程
				serverThread.run();
				count++;
				InetAddress address = socket.getInetAddress();
				System.out.println("该客户端IP地址为:" + address.getHostName());
				System.out.println("客户端连接次数:" + count);

			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


服务端的多线程类,用于处理多客户端连接:

package demo_Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

/*
 * 服务器线程处理类
 */
public class ServerThread extends Thread {
	// 和本线程相关的socket
	Socket socket = null;

	public ServerThread() {

	}

	public ServerThread(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		// 创建输入流,用于接收客户端数据
		InputStream is = null;// 字节输入流
		InputStreamReader isr = null;
		BufferedReader br = null;
		// 创建输出流,用于响应客户端
		OutputStream os = null;
		PrintWriter pw = null;

		try {
			is = socket.getInputStream();
			isr = new InputStreamReader(is);
			br = new BufferedReader(isr);
			String info = null;
			while ((info = br.readLine()) != null) {
				System.out.println("我是服务器,客户端说: " + info);
			}
			socket.shutdownInput();
			// 4.获取输出流,响应客户端
			os = socket.getOutputStream();
			pw = new PrintWriter(os);
			pw.write("欢迎使用");
			pw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {

			// 5,关闭资源
			try {

				if (pw != null) {
					pw.close();
				}
				if (os != null) {
					os.close();
				}
				if (br != null) {
					br.close();
				}
				if (isr != null) {
				}
				isr.close();
				if (is != null) {
				}
				is.close();
				if (socket != null) {
					socket.close();
				}
			} catch (Exception e2) {
				// TODO: handle exception
			}

		}
	}
}


客户端:


package demo_Socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {

	public static void main(String[] args) {
		// 1.创建客户端Socket,指定服务器地址和端口
		try {
			//2.获取输出流,向服务器端发送信息
			
			Socket socket = new Socket("localhost", 9978);
			OutputStream os = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(os);
			pw.write("用户名:tony;密码:789");
			pw.flush();
			socket.shutdownOutput();
			//3.打开输入流,读取服务端的响应信息
			InputStream is=socket.getInputStream();
			//包装成缓冲
			BufferedReader br=new BufferedReader(
					new InputStreamReader(is));
			String info = null;
			while ((info = br.readLine()) != null) {
				System.out.println("我是客户端,服务器说: " + info);
			}
			//4.关闭各种资源
			br.close();
			is.close();
			pw.close();
			os.close();
			socket.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


利用线程池实现ServerSocket的多客户端连接 **利用线程池实现ServerSocket的多客户端连接**------------------------------ 实际应用中,对于Socket通信而言基本都是多个客户端连接服务器端,因此简单的ServerSocket/Socket组合就无法满足要求了,而老是新开线程的话又太浪费资源,这里就用到Java自带的线程池ThreadPoolExcutor技术来实现多客户端连接服务端** Thr 阅读详情

相关推荐

Java Socket(六) 使用多线程实现多客户端的通信

问题一个服务端可以跟多个客户端通讯基本步骤1.服务器端创建ServerSocket方法,循环调用accept()方法等待客户端连接2.客户端创建socket和服务的请求连接3.服务端接受客户端的请求,建立专线连接4.建立连接的两个socket在一个单独的线程上对话5.服务器端继续等待新的连接创建一个服务器相关的线程类:package com.test;/** * Created by SuPhoe

Mr.Phoebe的专栏 2万+

NIO文章之一个线程同时监听2个socket

首先,创建服务端类,代码如下 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.cha

猿球崛起 705

Socket多客户端简易签到系统

概述效果原理和功能 服务器搭建在内网上,通过内网访问实现签到者位置的判断 我这个签到系统没有使用数据库,是将每个人的mac地址和姓名存在数组中,每天签 一次,然后每周可以自动发一封签到数据邮件给维护者 以后可以实现数据库,然后扩展更多的功能 服务端代码服务器主类 MyServerpackage qiu;import java.awt.BorderLayout; import java.awt.eve

戎码人生 1万+

java起socket监听,java socket 监听示例,javasocket,java socket监

java socket 监听示例,javasocket,java socket监java socket监听示例:socket监听需要使用SocketServer类,如下代码:package cn.outofmemory.socket.example;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io....

weixin_34928063的博客 1497

利用Socket实现多客户端传输对象和传输文件实现

第一次洗博客,纯属自己纪念,主要来源是慕课网的Socket通信课程,实现课后任务多客户端传输对象,自己遇到的最大问题是忘记给User类实现序列化接口。客户端实现:package com.imooc.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import

sinat_37518449的博客 4724

基于多客户端架构的Socket通信测试项目实战

为增强通信语义表达能力,应在基础传输之上定义结构化协议。典型的格式包括:其中Header可包含:- 消息ID- 类型(request/response/event)- 时间戳- 压缩/加密标识- 校验码(CRC)示例协议实现:结合前面的长度前缀机制,可构建高性能、可扩展的应用层通信框架。在现代网络通信中,明文传输数据极易遭受窃听、篡改和伪装等安全威胁。

weixin_42327217的博客 1006

JAVA SOCKET网络编程,服务端接收多个客户端连接的实现

这是基于前面一篇文章的一个简单扩展,当然这不是最好的实现 服务端如果要想接收多个客户端连接,必须

三也_攻城狮 1万+

librealsense2 camera.so: undefined symbol:ZN2cV3MatC1EV解决笔记记录

先参考的这个兄弟的办法虽然没解决但是提供了大方向感谢; realsenseD400系列相机报错:undefined symbol: _ZN2cv3MatC1EiiiRKNS_7Scalar_IdEE解决方案 后解决办法参考 No GPU usage on jetson xavier NX · Issue #2326 · IntelRealSense/realsense-ros · GitHubOpenCV_DIR" to a directory containing one of the above f

梁俊星的博客 3517

java socket 进阶话题一: socket 客户端连接管理

主控和代理端的消息通讯使用java socket,网上关于java socket 基础编程已经存在很多,本文主要探讨 java socket 中的一些延伸性的话题:多代理端同步消息通讯、 socket的分包和粘包,socket 客户端连接管理。

撒哈拉的海马 2312

PXE 批量安装 Ubuntu 20.04

原文链接:https://www.cpweb.top/1698 一、介绍   Ubuntu 20.04 的服务器安装程序支持新的操作模式:自动安装(automated installation)。自动安装可以通过自动安装配置提前回答所有这些配置问题,并使安装过程无需任何交互即可运行。   在 Ubuntu 18.04 中,用的应答文件是 preseeds(预配置文件),它基于 debian-installer(aka di)来实现自动安装的。需要注意的是,如果你使用的是 cobbler,那你应....

supahero的博客 1万+

Perplexity SPACE沙箱平台:安全AI开发环境实战解析

沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。

weixin_29029995的博客 275

Java Socket实现多客户端

Java Socket实现多客户端 实现类 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Arrays; import j...

wenhui 的博客 431

Simulink系统仿真

1.Simulink仿真基础 Simulink的启动 在 MATLAB主窗口选择“主页”选项卡,再单击“文件”命令组的“新建命令按钮,然后从下拉菜单中选择“ Simulink Model”命令。 在 MATLAB主窗口选择“主页”选项卡,再单击“ SIMULINK”命令组中的“ Simulink”命令按钮。 在 MATLAB的命令行窗口输入 simulink,命令。 利用File→New命令,可...

qq_43131852的博客 2万+

java socket调试_JAVA实现SOCKET多客户端通信的案例

一、ServerSocket1.为了方便调试,先创建一个界面用于显示客户端连接信息基于javafx包写的一个简单界面!javafx.scene.control.TextArea ta = new javafx.scene.control.TextArea();@Overridepublic void start(Stage primaryStage) throws Exception {scene...

weixin_32467421的博客 702

Python开发者必看:5分钟搞定Gemini API的3种调用方式(含代码示例)

本文为Python开发者详细介绍了三种高效调用Gemini API的核心方式:基础同步调用、流式调用和聊天模式,并涵盖多模态应用等高级特性。通过清晰的代码示例和实战场景分析,帮助开发者快速掌握Gemini API的集成与优化,提升AI应用开发效率。

g8f9d0s1a2的博客 1123

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程)

本文档是针对imx6ull平台`opencv`的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程`opencv`通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图像送给ffmpeg服务,另一个线程用于获取采集的视频图像并处理,处理完并在显示屏上显示,详细的流程请参看如下。

程小二的博客 1607

JAVA实现SOCKET多客户端通信

JAVA实现SOCKET多客户端通信一、ServerSocket1.为了方便调试,先创建一个界面用于显示客户端连接信息2.启动Socket服务3.服务器处理类HandleServer4.一些方法方便ServerTools类实现二、ServerTools1.实现指定服务器ID输出信息的工具三、ClientSocket1.同样的先建一个简单的界面用于输出信息和显示信息2.创建一个线程用于循环获取信息并...

SDM_JH的博客 6582

6、Dialogflow 开发全解析:从基础到高级应用

本文全面解析了 Dialogflow 的核心功能与高级应用,涵盖意图与实体的创建、上下文管理、后续意图设置以及高级实体类型的实际应用场景。详细介绍了自定义实体的导入导出规则、编程添加方法及数量限制,并通过流程图和实例说明了上下文生命周期与对话连贯性设计。结合电商、旅游、问卷调查等实际业务场景,展示了模糊匹配、自动扩展、复合实体等功能的强大灵活性。最后提供了开发最佳实践建议,帮助开发者构建高效、智能的对话系统。

kafka6courier的博客 104

Java通信原理(3)——多客户端连接(1)

Java、TCP/IP、Socket、通信

qq_64037280的博客 2337

【异常】Hermes Agent调用z.ai接口失败(余额不足)API call failed (attempt 1/3): RateLimitError [HTTP 429]

补充说明:同步尝试解析接口对应网页时,出现“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”提示,该提示不影响核心报错排查,仅作为辅助信息。

奶爸的编程之路,也就一周冷个三天 1199

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java socket长连接实现

java socket长连接的实现代码客户端代码合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 网络编程都是最底层都是基于socket的,鉴于客户端需要一直发送消息,使用短连接就不适合了,因为建立socket连接后发送完数据又马上断开连接。

weixin_43686413的博客 7889

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java实现socket长连接_java如何实现Socket的长连接和短连接

讨论Socket必讨论长连接和短连接一、长连接和短连接的概念1、长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接;后者是每次请求,都新建一个Socket,处理完一个请求就直接关闭掉Socket。所以,其实区分长短连接就是:整个客户和服务端的通讯过程是利用一个Socket还是多个Socket进行的。可能你会想:这还不简单,长连接不就是不关S...

weixin_42515631的博客 4369

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java Socket 网络编程:支持多客户端连接的Demo示例

在Java的网络编程中,一般分为Server端和Client端。Server端提供服务,Client端请求服务。那么如果Server端仅支持单个客户端,这显然无法满足日常需求。 前文已经讲述了简单的Java Socket编程示例,该示例仅支持单客户端链接。为此,本文对该示例进行了改进,使其可以同时服务多个客户端。 其中Client端代码不变,如下所示: import java.io.BufferedReader; import java.io.BufferedWriter; import java.

507

java socket客户端连接池

最近因项目需要,需要使用socket长连接服务器,但是在网上查资料发现都是服务器的连接池,于是自己动手写了个客户端socket连接池,记之,仅供参考,里面的意义变量请自行替换,废话少说,上代码。 1.   socet信息类     package cn.richinfo.cloudp.dm.common.util; import java.net.Socket; /** * @C

一杯咖啡 1万+

循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

目录[-] 一、TCP/IP协议二、TCP与UDP三、Socket是什么四、Java中的Socket五、基本的Client/Server程序六、多客户端连接服务器七、信息共享八、文件传输 一、TCP/IP协议   既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输。这里就要使用到TCP/IP协议。

hilary_hu的博客 718

Springboot集成socket通信并采用线程池处理多客户端请求

而socket.shutdownInput()表示告知客户端这边已经写完了,那么客户端收到消息后,就能知道已经读取完消息,如果客户端有要返回给客户的消息那么就可以通过服务端的输出流发送给客户端,如果没有,直接关闭Socket。因为有多客户端请求,因此本文用到。但某些场景下,需要服务器主动向客户端推送数据,保持客户端与服务器数据的实时与同步,这就用到socket接口来通信。HTTP连接是常用的C-S通信方式,按照“请求—响应”的方式,即客户端先向服务器发出请求,服务器端再回复数据。因此,这里建议了解一下。..

Java后端技术栈 4022
上一篇: java:网络编程(一/基于Socket的单客户端连接)
下一篇: java:(一)基于UDP的单客户端连接
include_ice
博客等级 码龄9年 307粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值