Java利用TCP实现服务端向客户端消息群发的示例代码
目录
- 前言
- 代码
- tcp服务端代码
- ServerThread 线程类
- TcpTool 消息群发工具类
- Tcp客户端代码
前言 项目需要和第三方厂商的服务需要用TCP协议通讯,考虑到彼此双方可能都会有断网重连、宕机重启的情况,需要保证 发生上述情况后,服务之间能够自动实现重新通信。研究测试之后整理如下代码实现。因为发现客户端重启后,对于服务端来说原来的客户端和服务端进程进程已经关闭,启动又和服务端新开了一个进程。所以实现原理就可以通过服务端向客户端群发实现,断开重新连接通讯。
【Java利用TCP实现服务端向客户端消息群发的示例代码】
代码
tcp服务端代码
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class HttpSocketServer {public static void main(String[] args) {try {ServerSocket server=new ServerSocket(9020); while (true){Socket client=server.accept(); System.out.println("进入了1个客户机连接:"+client.getRemoteSocketAddress().toString()); ServerThread st = new ServerThread(client); st.start(); }} catch (IOException e) {e.printStackTrace(); }} }
ServerThread 线程类
import java.io.*; import java.net.Socket; /** * 客户机线程 ——自动执行run * @author Lenovo */public class ServerThread extends Thread{ private Socket client; /*** 方法描述: 用有参构造接收主函数那边传来的 客户机*/public ServerThread(Socket client) {this.client=client; } @Overridepublic void run() {try {processSocket(); //调用你想执行的 使线程启动时在run方法开始执行} catch (IOException e) {e.printStackTrace(); }} /*** 调用以上方法*/public void processSocket() throws IOException {//加入集合 便于服务器群发TcpTool.addSocket(client); }
TcpTool 消息群发工具类
import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; /** * 聊天工具类 * @author tarzan */public class TcpTool { private static List clientList=new ArrayList(); /*** 便于 验证成功后加入客户机* @param socket*/public static void addSocket(Socket socket) {clientList.add(socket); } /*** 群发=遍历list中的all元素, 对每个元素 写出* @param msg* @throws IOException*/public static void sendAll(String msg){for (int i = 0; i
Tcp客户端代码
import org.springblade.core.tool.utils.StringUtil; import java.io.*; import java.net.Socket; /** * @author tarzan */public class HttpSocketClient {public static void main(String[] args) throws IOException {Socket client=new Socket("127.0.0.1",9020); while (true) {try {if (!clientIsClose(client)) {InputStream is=client.getInputStream(); BufferedReader reader=new BufferedReader(new InputStreamReader(is)); String text=reader.readLine(); if(StringUtil.isNotBlank(text)){System.out.println("来自服务端的消息:"+text); }}else{try {//断开5秒后重新连接Thread.sleep(5000); } catch (InterruptedException e) {e.printStackTrace(); }client=new Socket("127.0.0.1",9020); }} catch (IOException e) {e.printStackTrace(); }} } public static Boolean clientIsClose(Socket socket){try{//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信socket.sendUrgentData(0xFF); // 发送一个数据包, 如果通信正常就不会报错.没有报错说明没有关闭., 返回falsereturn false; }catch(Exception se){return true; }}
运行一个服务端,启动多个客户端进行测试。
控制台输出
文章图片
以上只是实现的最简单的demo,服务端,因为服务端和客户端都需要不断监听彼此通信,发送消息时候,需要另起一个线程,调用TcpTool工具类想客户端群发消息。
到此这篇关于Java利用TCP实现服务端向客户端消息群发的示例代码的文章就介绍到这了,更多相关Java TCP消息群发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 面试题(Java序列化与反序列化)
- jquery的height()和javascript的height总结,js获取屏幕高度
- java|程序员网吧写代码挨顿打(网友(想笑死我继承我的花呗?))
- java|Ssm美众针纺有限公司人事管理毕业设计源码051708
- java|SSM在线学习网站的设计与实现毕业设计源码011451
- javascript|webpack5 splitChunks 配置和用法
- java|Shiro进阶(四)Shiro之RememberMe
- JavaEE之SSM|JavaEE之SSM框架整合
- java|整合SSM框架全步骤
- Javascript|Javascript Constructor构造器模式与Module模块模式