Java网络通信实现

UDP

UDPServer

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UDPServer {public static void main(String[] args) throws IOException {System.out.println("UdpServer启动");// 创建upd套接字DatagramSocket socket = new DatagramSocket(8080);// 获取客户端连接byte[] buffer = new byte[1024];while (true) {// 获取客户端请求DatagramPacket client = new DatagramPacket(buffer, buffer.length);socket.receive(client);String request = new String(client.getData(), 0, client.getLength());// 回显客户端String response = request;socket.send(new DatagramPacket(response.getBytes(), response.getBytes().length,client.getAddress(), client.getPort()));// 打印交互日志System.out.printf("客户端[%s:%d] receive-> %s send-> %s\n", client.getAddress().toString(),client.getPort(), request, response);}}
}

UDPClient

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;public class UDPClient {public static void main(String[] args) throws IOException {System.out.println("UdpClient启动");// 创建客户端套接字DatagramSocket socket = new DatagramSocket();// 创建数据报byte[] buffer = new byte[1024];DatagramPacket client = new DatagramPacket(buffer, buffer.length,InetAddress.getByName("127.0.0.1"), 8080);while (true) {// 获取发送数据System.out.print("send -> ");Scanner scanner = new Scanner(System.in);String request = scanner.next();client.setData(request.getBytes());// 发送数据socket.send(client);// 获取服务器回显数据DatagramPacket server = new DatagramPacket(buffer, buffer.length);socket.receive(server);// 打印交互日志System.out.printf("receive ->[%s:%d] %s\n", server.getAddress().toString(), server.getPort(),new String(server.getData(), 0, server.getLength()));}}
}

测试结果

TCP

TCPServer

import java.io.IOException;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class TCPServer {public static void main(String[] args) throws IOException {System.out.println("TCPServer启动");// 创建监听套接字ServerSocket listenSocket = new ServerSocket(8080, 20, InetAddress.getByName("127.0.0.1"));// 创建线程池处理客户端数据ExecutorService clientPool = Executors.newCachedThreadPool();while (true) {// 获取客户端连接Socket client = listenSocket.accept();// 客户端处理clientPool.submit(() -> {try {clientProcess(client);} catch (IOException e) {e.printStackTrace();}});}}public static void clientProcess(Socket client) throws IOException {System.out.printf("client[%s:%d] connect success\n",client.getInetAddress().toString(), client.getPort());// 处理客户端数据try (Scanner input = new Scanner(client.getInputStream());PrintStream output = new PrintStream(client.getOutputStream())) {while (true) {if (!input.hasNext()) {System.out.printf("client[%s:%d] disconnect\n",client.getInetAddress().toString(), client.getPort());} else {// 约定以\n为一个完整报文String request = input.nextLine();// 回显客户端String response = request;output.println(response);output.flush();// 打印交互日志System.out.printf("client[%s:%d] receive -> %s send -> %s\n",client.getInetAddress().toString(), client.getPort(), request, response);}}}}
}

TCPClient

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;public class TCPClient {public static void main(String[] args) throws IOException {System.out.println("TCPClient启动");// 创建客户端连接Socket socket = new Socket("127.0.0.1", 8080);Scanner scanner = new Scanner(System.in);try (Scanner input = new Scanner(socket.getInputStream());PrintStream output = new PrintStream(socket.getOutputStream())) {while (true) {System.out.print("send -> ");String request = scanner.nextLine();// 发送请求数据output.println(request);// 获取服务器回显数据String response = input.nextLine();// 打印交互日志System.out.printf("receive -> server[%s:%d] %s\n",socket.getInetAddress().toString(), socket.getPort(), response);}}}
}

测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两台电脑通过网线直连共享数据(超详细)- 我的实践记录

原文链接 按照原文的操作,成功通过直连网线连接了两台windows电脑并共享传输数据。 ping不通可能是防火墙没关闭导致的,但是完全关闭防火墙又不安全。 那么有没有不关闭防火墙,能够上网,又能直连另一台电脑呢? 我们…

拓扑排序-java

主要通过宽度优先搜索(BFS)来实现有向无环图的拓扑序列,邻接表存储图。数组模拟单链表、队列,实现BFS基本操作。 文章目录 前言 一、有向图的拓扑序列 二、算法思路 1.拓扑序列 2.算法思路 三、使用步骤 1.代码如下(示…

大模型实战-【Langchain4J中Using AI Services in Spring Boot Application②】

Using AI Services in Spring Boot Application LangChain4j Spring Boot starter greatly simplifies using AI Services in Spring Boot applications. @SystemMessage Now, let’s look at a more complicated example. We’ll force the LLM reply using slang 😉 Th…

QT 使用资源文件的注意点

不要存放没有使用的资源文件 即使在代码中没有使用到的资源文件,也会编译到执行文件或者DLL里面去这样会增大它的体积。如下 在代码没有使用这个资源文件(10.4M的2k图片),但是编译出来的程序有 12M左右的大小 1 假设我们有一个比较复杂的项目&#…

Web前端学习之路:深入探索学习时长与技能进阶的奥秘

Web前端学习之路:深入探索学习时长与技能进阶的奥秘 在数字化时代,Web前端技术成为了连接用户与互联网世界的桥梁。对于初学者来说,学习Web前端究竟需要多久,以及如何高效掌握相关技能,一直是困扰他们的难题。本文将从…

ReentrantLock底层原理

ReentrantLock public ReentrantLock() {sync new NonfairSync(); }public ReentrantLock(boolean fair) {sync fair ? new FairSync() : new NonfairSync(); }ReentrantLock 的默认实现是非公平锁,实际上 ReentrantLock 中的方法,几乎都让 sync 实现…

springboot高校运动会信息管理系统设计与实现-计算机毕业设计源码92968

摘 要 本论文介绍了一个高校运动会信息管理系统的设计和实现过程。首先是高校运动会的需求分析和可行性分析,通过比较运动会的各个工作流程,确定了系统的数据流程和数据库结构,然后介绍了高校运动会信息管理系统开发所使用的软件开发工具&…

Java实现数据结构——顺序表

目录 一、前言 二、实现 2.1 增 2.2 删 2.3 查 2.4 改 2.5 销毁顺序表 三、Arraylist 3.1 构造方法 3.2 常用操作 3.3 ArrayList遍历 四、 ArrayList具体使用 4.1 杨辉三角 4.2 简单洗牌算法 一、前言 笔者在以前的文章中实现过顺序表 本文在理论上不会有太详细…

TCP是如何保证可靠传输的

TCP(传输控制协议)通过多种机制来保证数据的可靠传输,以下是TCP确保可靠性的主要特点: 数据包编号: TCP给每个字节的数据分配一个序号,确保数据能够按照正确的顺序被接收。 确认应答(ACK&#x…

vscode侧边栏错乱重制

vscode 重制命令面板 View: Reset View Locations

13_1 Linux 邮件服务与NTP时间服务

13_1 Linux 邮件服务与NTP时间服务 文章目录 13_1 Linux 邮件服务与NTP时间服务[toc]1. 邮件服务器2. NTP时间服务器 1. 邮件服务器 邮件服务器的作用: 为用户提供电子邮箱存储空间(用户名邮件域名)处理用户发出的邮件 —— 传递给收件服务器…

三星系统因何而成?或许是因为吞噬了第四颗恒星

相比于其他的类似星体,这个特殊的三星系统拥有更大更紧密的星体。 三星 天文学家发现了前所未见的三星系统。相比于其他典型的三星系统,这一三星系统拥有更大的体积,并且排列也更加紧密,这也使得这一系统更加特别。科学家推测&am…

【题解】—— LeetCode一周小结23

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结22 3.分糖果 II 题目链接:1103. 分糖果 II 排排坐…

MySQL-数据处理(1)

029-数据处理函数之获取字符串长度 select length(我是Cupid); select char_length(我是Cupid);concat (concatenate) select concat(cu, pid, so, handsome);030-去除字符串前后空白-trim select trim( a b c );select trim(leading 0 from 000110); select t…

C++设计模式---策略模式

1、介绍 策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的内部算法。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变…

USB转I2C转SPI芯片CH341

CH340与CH341区别 CH340主要用于将USB转换为各种串口,CH340H和CH340S可以实现USB转并口。 CH341和340的不同之处在于CH341提供I2C和SPI接口,方便连接到I2C或SPI总线操作相关的器件。 CH341主要有6种封装。见表1. CH341T SSOP-20封装和丝印 USB 总线转接…

【服务实现读写分离】

文章目录 什么是读写分离基于Spring实现实现读写分离项目中常用的数据源切换依赖包 什么是读写分离 服务读写分离(Service Read-Write Splitting)是一种常见的数据库架构设计模式,旨在提高系统的性能和可扩展性。通过将读操作和写操作分离到…

分布式事务AP控制方案(上)

分布式事务控制方案 本篇文章给出一种要求高可用性(AP思想)的分布式事务控制方案 下篇新鲜出炉:点我查看 分布式事务控制方案1、业务背景2、本地消息表的设计3、对消息表的操作4、任务调度5、任务流程控制的抽象类6、课程发布的实现类7、总…

[力扣题解] 236. 二叉树的最近公共祖先

题目:236. 二叉树的最近公共祖先 思路 代码 用深度搜索的思想(好吧,前序、中序、后序都是深搜思想),保存寻找路径,看看找到2个节点的路径的重合部分,就可以找到最近公共祖先; /*…

代理IP使用api接

代理IP使用API接口,通常是指通过API接口获取代理IP地址,并将其应用于爬虫、数据采集、反爬虫等场景中,以提高数据采集效率和保护数据采集安全。 一般来说,代理IP提供商会提供API接口文档和SDK供开发者使用。你需要先注册并登录代…