首页 文章 精选 留言 我的

精选列表

搜索[通信],共10001篇文章
优秀的个人博客,低调大师

Spring Integration 5.3 发布,Spring 消息通信

Spring Integration 5.3 正式发布了,可从里程碑仓库获取。 compile "org.springframework.integration:spring-integration-core:5.3.0.M3" 主要更新内容: Reactive transactions支持。现在可以为端点配置ReactiveTransactionManager,从而为响应生成响应类型或仅实现ReactiveMessageHandler。 ReactiveRequestHandlerAdvice- 消息处理程序的MethodInterceptor,将Mono作为有效载荷进行回复。定制的BiFunction<Message<?>, Mono<?>, Publisher<?>>通过Mono.transform(Function)运算符应用于返回的Mono,以将某些方面添加到生成的结果中。通常,它用于应用于远程响应请求的超时、重试、标记选项,例如 Webflux 或 RSocket。 Kotlin DSL。正如之前所承诺的,spring-integration-kotlin-dsl项目已经被合并到了核心项目中,以实现一般可用性和进一步的可能的改进,这些改进只有直接访问核心 Spring Integration 类才有可能实现。 Web Services Java DSL。随着社区的大量需求,用于 Web 服务模块的 Java DSL 组件已被纳入项目。 更新说明:https://spring.io/blog/2020/03/11/spring-integration-5-3-milestone-3-available

优秀的个人博客,低调大师

Java 模拟基于TCP的Socket通信

效果图: 单线程服务器 多线程服务器 客户端模拟 多线程服务器代码 import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class MutiThreadServer implements Runnable { Socket socket; public MutiThreadServer(Socket socket) { this.socket = socket; } public static void main(String[] args) throws IOException { int count=0; ServerSocket serverSocket = new ServerSocket(1234); System.out.println("listening"); while (true){ Socket socket1 = serverSocket.accept(); System.out.println("connected"); new Thread(new MutiThreadServer(socket1)).start(); count++; System.out.println("客户端的数量:"+count); InetAddress address = socket1.getInetAddress(); System.out.println("当前客户端的IP为:"+ address.getHostAddress()); } } @Override public void run() { InputStream inputStream=null; //字节输入流 InputStreamReader inputStreamReader=null; //把字节输入流转化为字符输入流 BufferedReader bufferedReader=null; //为输入流添加缓冲 OutputStream outputStream=null; PrintWriter printWriter=null; try { /** * 获取客户端的输入信息 */ inputStream = socket.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(inputStreamReader); String info = null; while ((info = bufferedReader.readLine()) != null){ System.out.println("我是服务器,收到客户端信息:"+info); } socket.shutdownInput(); //关闭输入流 /** * 响应客户端 */ //获取输出流,用于向服务器发送请求 outputStream = socket.getOutputStream(); //把输出流转化为打印流 printWriter = new PrintWriter(outputStream); printWriter.write("用户名是:Harry 欢迎您!!!"); printWriter.flush(); } catch (IOException e) { e.printStackTrace(); }finally { //关闭资源 try { if (inputStream != null) inputStream.close(); if (inputStream != null) inputStreamReader.close(); if (bufferedReader != null) { bufferedReader.close(); } if (outputStream != null) { outputStream.close(); } if (printWriter != null) { printWriter.close(); } if (socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } 单线程服务器 import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { /** * 创建一个服务器端的Socket,并指定要监听的端口 */ ServerSocket serverSocket = new ServerSocket(1234); System.out.println("````````````服务器即将启动````````````"); /** * 启动监听 */ Socket socket = serverSocket.accept(); /** * 获取客户端的输入信息 */ InputStream inputStream = socket.getInputStream(); //字节输入流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //把字节输入流转化为字符输入流 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //为输入流添加缓冲 String info = null; while ((info = bufferedReader.readLine()) != null){ System.out.println("我是服务器,收到客户端信息:"+info); } socket.shutdownInput(); //关闭输入流 /** * 响应客户端 */ OutputStream outputStream = socket.getOutputStream(); //获取输出流,用于向服务器发送请求 PrintWriter printWriter = new PrintWriter(outputStream); //把输出流转化为打印流 printWriter.write("用户名是:Harry 欢迎您!!!"); printWriter.flush(); //关闭资源 printWriter.close(); outputStream.close(); bufferedReader.close(); inputStreamReader.close(); inputStream.close(); socket.close(); serverSocket.close(); } } 客户端 import java.io.*; import java.net.Socket; public class ClientSocket { public static void main(String[] args) throws IOException { /** * 创建一个客户端的Socket,并指定服务器地址和端口号 */ Socket socket = new Socket("localhost",1234); OutputStream outputStream = socket.getOutputStream(); //获取输出流,用于向服务器发送请求 PrintWriter printWriter = new PrintWriter(outputStream); //把输出流转化为打印流 printWriter.write("用户名是:Harry,密码是:123"); printWriter.flush(); socket.shutdownOutput(); //关闭输出流 /** * 获取服务器的信息 */ InputStream inputStream = socket.getInputStream(); //字节输入流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //把字节输入流转化为字符输入流 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //为输入流添加缓冲 String info = null; while ((info = bufferedReader.readLine()) != null){ System.out.println("我是客户端,收到服务器信息:"+info); } socket.shutdownInput(); //关闭输入流 /** * 关闭资源 */ inputStream.close(); inputStreamReader.close(); bufferedReader.close(); printWriter.close(); outputStream.close(); socket.close(); } } 注:测试的时候只需要启动其中一个服务器就即可。

优秀的个人博客,低调大师

Java 模拟基于UDP的Socket通信

效果图: 多线程服务器 客户端 单线程服务器 多线程服务器 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPMutiThreadServer implements Runnable { DatagramPacket datagramPacket; //数据报包 byte[] data1; //存放数据的变量 public UDPMutiThreadServer(DatagramPacket datagramPacket,byte[] data1) { this.datagramPacket = datagramPacket; this.data1=data1; } public static void main(String[] args) throws SocketException { int count=0; //用于统计客户端数量 DatagramSocket datagramSocket = new DatagramSocket(1234); System.out.println("```````服务器已经启动,等待客户端发送数据````````"); while (true) { /** * 创建数据报包,用于保存收发的数据,需要定义数据包的大小和长度 */ byte[] data = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(data,data.length); try { datagramSocket.receive(datagramPacket); } catch (IOException e) { e.printStackTrace(); } if (datagramPacket.getLength() > 0) { new Thread(new UDPMutiThreadServer(datagramPacket,data)).start(); count++; System.out.println("客户端的数量为:" + count); } } } @Override public void run() { // byte[] data=new byte[1024]; String info = new String(data1,0,datagramPacket.getLength()); System.out.println("我是服务器,客户端发送的信息是:"+ info); /** * 响应客户端数据 * * 从接收的数据包中获取客户端的地址和端口 */ InetAddress address = datagramPacket.getAddress(); int port = datagramPacket.getPort(); //定义响应数据 byte[] data2 = "服务器已经收到你的信息,谢谢!".getBytes(); //用DatagramPacket把要发送的数据进行打包 DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port); //用datagramSocket把数据包发送给客户端 try { DatagramSocket datagramSocket= new DatagramSocket(); datagramSocket.send(datagramPacket1); } catch (IOException e) { e.printStackTrace(); } } } 客户端 import java.io.IOException; import java.net.*; public class UDPClient { public static void main(String[] args) throws IOException { /** * 向服务器发送数据 * * 定义服务器地址,端口号和数据 */ InetAddress address = InetAddress.getByName("localhost"); int port=1234; byte[] data ="我是:admin123,密码:123456546".getBytes(); /** * 定义一个DatagramPacket,把要发送的数据时行打包 */ DatagramPacket datagramPacket = new DatagramPacket(data,data.length,address,port); /** * 定义一个DatagramSocket,用于发送和接收数据 */ DatagramSocket datagramSocket = new DatagramSocket(); datagramSocket.send(datagramPacket); /** * 接收服务器发送的数据 */ //定义数据包的容量 byte[] daaa= new byte[1024]; DatagramPacket datagramPacket1 = new DatagramPacket(daaa,daaa.length); //用DatagramSocket接收数据 datagramSocket.receive(datagramPacket1); //读取数据包的内容 String info = new String(daaa,0,datagramPacket1.getLength()); System.out.println("我是客户端,你说:"+info); datagramSocket.close(); } } 单线程服务器 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { /** * 接收客户端数据 * * 创建服务器端的Socket,用于收发数据,需要指定端口 */ DatagramSocket datagramSocket = new DatagramSocket(1234); /** * 创建数据报包,用于保存收发的数据,需要定义数据包的大小和长度 */ byte[] data = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(data,data.length); System.out.println("```````服务器已经启动,等待客户端发送数据````````"); /** * 用Socket收取从客户端发来的数据,并保存在Packet数据报包中 */ datagramSocket.receive(datagramPacket); String info = new String(data,0,datagramPacket.getLength()); System.out.println("我是服务器,客户端发送的信息是:"+ info); /** * 响应客户端数据 * * 从接收的数据包中获取客户端的地址和端口 */ InetAddress address = datagramPacket.getAddress(); int port = datagramPacket.getPort(); //定义响应数据 byte[] data2 = "服务器已经收到你的信息,谢谢!".getBytes(); //用DatagramPacket把要发送的数据进行打包 DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port); //用datagramSocket把数据包发送给客户端 datagramSocket.send(datagramPacket1); } }

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册