Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java多客户端和单服务端

java多客户端和单服务端

作者头像
天天Lotay
发布于 2022-12-02 01:41:52
发布于 2022-12-02 01:41:52
67900
代码可运行
举报
文章被收录于专栏:嵌入式音视频嵌入式音视频
运行总次数:0
代码可运行

该例子可以实现多个客户端的聊天室功能,即任何一个客户端发送消息给服务器,服务器会转发给所有与它连接的客户端。因为服务器要维护与多个客户端的连接,这里用线程实现,每个客户端和服务器端连接后,服务器端都会开启一个线程,用于接收当前这个客户端的消息,并转发给所有的客户端。

该例子由3个Java类实现,客户端:tcp. EchoMultiClient,服务器端:tcp. EchoMultiServer,tcp.EchoServerThread(服务器端使用的线程类)。

客户端类,该客户端发送消息和接收消息分别在一个线程中进行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package test;

import java.util.List;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class MultiServer {
ServerSocket serverSocket;
List<Socket> clients=new ArrayList<Socket>();
public MultiServer() {
	try {
		serverSocket=new ServerSocket(7);
		while(true) {
			Socket clientSocket=serverSocket.accept();
			clients.add(clientSocket);
			new EchoServerThread(clientSocket,clients).start();
		}
	}catch(IOException e) {
		e.printStackTrace();
	}
}
public static void main(String[] args) {
	new MultiServer();
}
}

服务器端代码,该代码中每监听到客户端的一个连接,就调用线程类创建并启动一个线程对象。

服务器端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package test;

import java.util.List;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class MultiServer {
ServerSocket serverSocket;
List<Socket> clients=new ArrayList<Socket>();
public MultiServer() {
	try {
		serverSocket=new ServerSocket(7);
		while(true) {
			Socket clientSocket=serverSocket.accept();
			clients.add(clientSocket);
			new EchoServerThread(clientSocket,clients).start();
		}
	}catch(IOException e) {
		e.printStackTrace();
	}
}
public static void main(String[] args) {
	new MultiServer();
}
}

服务器端使用的线程类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package test;
//服务器端使用的线程类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.List;

public class EchoServerThread extends Thread{
Socket myClient;
List<Socket> clients;
String clientHostName;
int clientPort;
public EchoServerThread(Socket myClient,List<Socket> clients) {
	super();
	this.myClient=myClient;
	this.clients=clients;
}
public void run() {
	InetSocketAddress clientAddress=(InetSocketAddress)myClient.getRemoteSocketAddress();
	clientHostName=clientAddress.getHostName();
	clientPort=clientAddress.getPort();
	System.out.println("第"+clients.size()+"个客户端"+clientHostName+":"+clientPort+"已连接");
	try {
		String inStr;
		BufferedReader in=new BufferedReader(new InputStreamReader(myClient.getInputStream()));
		while((inStr=in.readLine())!=null) {
			System.out.println(inStr+".来自"+clientHostName+":"+clientPort+"");
			for(Socket client:clients) {
				if(client!=null) {
					PrintWriter out=new PrintWriter(client.getOutputStream(),true);
					out.println(inStr+".来自"+clientHostName+":"+clientPort+"");
				}
		}
	
}	
}catch(IOException e) {
	System.err.println(clientHostName+":"+clientPort+"退出了.");
}
}
}

该程序运行时,先启动服务器端代码,再多次启动客户端。

例如以下运行效果,启动了服务器端后,启动了3次客户端,3个客户端分别发送消息,效果如下:

效果图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java单客户端和服务器端
运行时,先运行服务器端,再运行客户端,在客户端输入数据,发送给服务器,服务器接收后再返回给客户端,客户端接收后打印到屏幕。 客户端界面:
天天Lotay
2022/12/02
1.2K0
java单客户端和服务器端
【Java 网络编程】TCP 服务器端 客户端 简单示例
创建 Socket 需要设置超时时长 , 要连接的服务器端的端点信息 , 该端点包括 IP 地址和端口号 ;
韩曙亮
2023/03/27
2.9K0
【Java 网络编程】TCP 服务器端 客户端 简单示例
Java Socket编程基础
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.csdn.net/article/details/19974999
亦山
2019/05/25
1.1K0
多线程TCP服务器
本文讲述了一个基于Java实现的TCP服务器和客户端的示例,通过多线程实现每连接发送一个图片,并提供了传输速度的提示。服务器端采用ServerSocket类实现,而客户端采用Socket类实现。客户端连接到服务器后,服务器会启动一个新的线程来处理每个客户端连接,客户端则在每个连接中发送一个图像文件。服务器端在处理每个连接时,读取文件并发送回客户端。传输速度提示通过在服务器端启动一个单独的线程来处理所有连接来实现。总体而言,该示例提供了一个简单的TCP通信框架,可以在基于Java的应用程序中使用。
GavinZhou
2018/01/02
1.8K0
多线程TCP服务器
【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
文章目录 I 客户端代码示例 II 服务器端代码示例 III 运行结果 I 客户端代码示例 ---- import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer;
韩曙亮
2023/03/27
8520
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
不像 UDP 有 DatagramPacket 是专门的“UDP 数据报”,TCP 没有专门的“TCP 数据报”
椰椰椰耶
2024/09/20
1300
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
《Java-SE-第三十一章》之网络编程
&ebsp;&ebsp;当我们使用浏览器进行搜索时,浏览器会根据关键字搜索出视频,图片文本等资源,这些资源都属于网络资源。网络资源相比于本地资源来说更加的丰富多彩。而这些网络资源都需要通过网络编程来进行数据传输。
用户10517932
2023/10/07
3230
《Java-SE-第三十一章》之网络编程
Java利用TCP协议实现客户端与服务器通信【附通信源码】
上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP、TCP、UDP以及端口和套接字的一些概念,想了解的小伙伴可以看我的这篇文章“盘点那些进行网络编程必须要知道的基础知识”,那么今天大灰狼就来和大家分享一下如何使用TCP/IP进行网络程序的开发。
灰小猿
2020/09/23
3.6K0
Java利用TCP协议实现客户端与服务器通信【附通信源码】
Java通过Socket实现TCP编程,实现用户登录之服务器相应客户端,客户端和服务端之间的通信
服务器端:   1.创建ServerSocket对象,绑定监听端口;   2.通过accept()方法监听客户端请求;   3.建立连接后通过输入流读取客户端发送的请求信息;   4.通过输出流向客户
用户1289394
2018/10/25
5.7K0
Java通过Socket实现TCP编程,实现用户登录之服务器相应客户端,客户端和服务端之间的通信
【JavaEE】——TCP回显服务器(万字长文超详细)
Socket是客户端Socket,或者服务端收到客户端accept的请求后返回的服务端Socket,不管是客户端还是服务端,都是建立连接以后,保存对端的信息,以及用来与对方接收和发送数据的
三三是该溜子
2024/12/30
1420
【JavaEE】——TCP回显服务器(万字长文超详细)
BIO NIO AIO演变1 BIO2 NIO3 AIO4 常见面试题5 总结
Block-IO 是一种阻塞同步的通信模式。 常说的Socket IO 一般指的是BIO。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。
JavaEdge
2018/08/10
1.4K0
BIO NIO AIO演变1 BIO2 NIO3  AIO4 常见面试题5  总结
基于TCP通信实现信号切换的服务端与客户端示例(附带详细代码)
在这篇博客中,我们将介绍如何使用Java创建一个简单的TCP通信系统。通过该系统,客户端向服务端发送信号(例如,发送“1”来切换信号),而服务端监听特定的IP地址和端口,并根据接收到的信号进行相应的操作。我们将通过详细的代码示例来展示如何实现这个系统,并解释每一部分的工作原理。对于小白用户来说,本篇文章会非常详细,帮助你从零开始理解TCP通信的实现。
默 语
2024/12/24
3200
Netty序章之BIO NIO AIO演变
Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架。而BIO,NIO,AIO更是笔试中要考,面试中要问的技术。也是一个很好的加分项,加分就是加工资,你还在等什么?本章带你细细品味三者的不同! 流程图:
用户1212940
2022/04/13
5640
Netty序章之BIO NIO AIO演变
一个Java实现的简单的多个客户端聊天程序
客户端 import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.*; import java.net.*; public class HeartClient extends Frame { /* * 成员方法出场... */ private TextField tfText; private TextArea taContent; private
用户8671053
2021/09/22
1.1K1
深入探究Java网络编程:使用Socket进行简单通信
在Java应用程序开发中,网络编程是一个广泛应用的领域。通过使用Socket技术,我们可以轻松地建立客户端和服务器端之间的通信,实现数据传输。本文将介绍如何使用Java中的Socket进行简单的网络通信,旨在为初学者提供易于理解的指导。
洛秋_
2024/01/29
4670
深入探究Java网络编程:使用Socket进行简单通信
从理论到实践:深度解读BIO、NIO、AIO的优缺点及使用场景
BIO、NIO和AIO是Java编程语言中用于处理输入输出(IO)操作的三种不同的机制,它们分别代表同步阻塞I/O,同步非阻塞I/O和异步非阻塞I/O。
索码理
2023/10/10
11.4K0
从理论到实践:深度解读BIO、NIO、AIO的优缺点及使用场景
【JavaEE初阶】网络编程
网络资源,其实就是在网络中可以获取的各种数据资源。 而所有的网络资源,都是通过网络编程来进行数据传输的。
xxxflower
2023/10/16
2790
【JavaEE初阶】网络编程
完美诠释NIO的强大之处-原理和实战
平时工作中,很大部分时间都投入了业务。我们对于一些框架、设计思想等都没有太去的关注,第一个深入一个技术底层是比较枯燥与孤独的;第二个就是没有人带领去用一个有趣或者通俗易懂的教导;但如果真的是明白了那些大牛们的思维方式,我们都会异口同声的称赞他们,真的就是牛逼啊。
chengcheng222e
2021/11/04
2270
【网络编程】从零开始彻底了解网络编程(三)
TCP 的 socket API 和 UDP 的 socket API 差异很大. 但是和的文件操作有密切联系. TCP中关键的类: ① ServerSocket: 给服务器使用的类,使用这个类来绑定端口号. ② Socket: 既会给服务器用,又会给客户端用. 这两个类抽象了网卡这样的硬件设备.
用户11369350
2025/04/22
1060
【网络编程】从零开始彻底了解网络编程(三)
Java—网络编程
1)IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素。 2)端口号:计算机中应用的标号(代表一个应用程序),0-1024系统使用或保留端口,端口号占2个字节,所以有效端口0-65535. 3)通信协议:通信的规则TCP,UDP 4)注意:在通信协议相同的情况下,端口号才是唯一的。
全栈程序员站长
2022/09/08
2.4K0
Java—网络编程
推荐阅读
相关推荐
java单客户端和服务器端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验