浅谈Java和C#UDP通信

news/2025/2/10 7:13:10/

Java UDP高级用法示例

1. 多线程UDP服务器
java">import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class MultiThreadedUDPReceiver implements Runnable {private int port;private ExecutorService executorService;public MultiThreadedUDPReceiver(int port, int numberOfThreads) {this.port = port;this.executorService = Executors.newFixedThreadPool(numberOfThreads);}@Overridepublic void run() {DatagramSocket socket = null;try {socket = new DatagramSocket(port);byte[] buffer = new byte[1024];while (true) {DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String message = new String(packet.getData(), 0, packet.getLength());System.out.println("Message received: " + message);executorService.submit(() -> processMessage(message));}} catch (Exception e) {e.printStackTrace();} finally {if (socket != null && !socket.isClosed()) {socket.close();}if (!executorService.isShutdown()) {executorService.shutdown();}}}private void processMessage(String message) {System.out.println("Processing message: " + message);}public static void main(String[] args) {int port = 9876;int numberOfThreads = 4;Thread receiverThread = new Thread(new MultiThreadedUDPReceiver(port, numberOfThreads));receiverThread.start();}
}

2. 带校验和的UDP数据传输
java">import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPChecksumExample {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket();InetAddress address = InetAddress.getByName("localhost");int port = 9876;// 发送端:添加校验和String message = "Hello, UDP!";byte[] data = message.getBytes();int checksum = calculateChecksum(data);byte[] checksumBytes = intToBytes(checksum);byte[] buffer = new byte[data.length + checksumBytes.length];System.arraycopy(data, 0, buffer, 0, data.length);System.arraycopy(checksumBytes, 0, buffer, data.length, checksumBytes.length);DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);socket.send(packet);// 接收端:校验数据完整性byte[] receiveBuffer = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);socket.receive(receivePacket);byte[] receivedData = new byte[receivePacket.getLength() - 4];byte[] receivedChecksumBytes = new byte[4];System.arraycopy(receivePacket.getData(), 0, receivedData, 0, receivePacket.getLength() - 4);System.arraycopy(receivePacket.getData(), receivePacket.getLength() - 4, receivedChecksumBytes, 0, 4);int receivedChecksum = bytesToInt(receivedChecksumBytes);int calculatedChecksum = calculateChecksum(receivedData);if (receivedChecksum == calculatedChecksum) {System.out.println("Data integrity verified.");} else {System.out.println("Data corruption detected.");}socket.close();}private static int calculateChecksum(byte[] data) {int checksum = 0;for (byte b : data) {checksum += b;}return checksum;}private static byte[] intToBytes(int value) {return new byte[]{(byte) (value >> 24),(byte) (value >> 16),(byte) (value >> 8),(byte) value};}private static int bytesToInt(byte[] bytes) {return (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];}
}

C# UDP高级用法示例

1. 异步UDP服务器
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;class AsyncUdpServer
{private const int Port = 5000;static async Task Main(string[] args){using (UdpClient udpClient = new UdpClient(Port)){Console.WriteLine("UDP Server is running...");while (true){try{UdpReceiveResult result = await udpClient.ReceiveAsync();string receivedData = Encoding.UTF8.GetString(result.Buffer);Console.WriteLine($"Received data from {result.RemoteEndPoint}: {receivedData}");string responseData = "Message received!";byte[] sendBytes = Encoding.UTF8.GetBytes(responseData);await udpClient.SendAsync(sendBytes, sendBytes.Length, result.RemoteEndPoint);}catch


http://www.ppmy.cn/news/1570793.html

相关文章

Flutter List 的 every 如果回调函数抛出异常 应该如何处理

在使用 List 的 every 方法时&#xff0c;如果回调函数抛出异常&#xff0c;可以通过以下几种方式进行处理&#xff1a; 1. 在回调函数内部捕获异常 在回调函数内部使用 try-catch 语句捕获可能抛出的异常&#xff0c;并根据具体情况进行处理。这样可以避免异常直接导致 ever…

【QT】 Qt经典面试题

文章目录 1. Qt 基础1.1 Qt 的核心特性1.2 Qt 的信号与槽机制1.3 Qt 的元对象系统 2. Qt GUI 编程2.1 Qt 的窗口部件2.2 Qt 的布局管理器 3. Qt 多线程编程3.1 QThread3.2 QtConcurrent 4. Qt 网络编程4.1 QTcpSocket 和 QTcpServer4.2 QNetworkAccessManager 5. Qt 数据库编程…

使用Python开发PPT批量转图片(合并)

在日常工作中&#xff0c;我们经常需要将PowerPoint演示文稿转换为图片格式&#xff0c;特别是在需要快速预览或分享时。本文将详细介绍如何使用Python开发一个带有图形界面的PPT批量转图片工具&#xff0c;并深入探讨实现过程中遇到的问题及解决方案。 C:\pythoncode\new\conv…

Redis07 - Redis底层数据结构

Redis底层数据结构 文章目录 Redis底层数据结构一&#xff1a;对象机制详解二&#xff1a;SDS 简单动态字符串三&#xff1a;压缩列表zipList结构 四&#xff1a;跳表 一&#xff1a;对象机制详解 String类型 - 简单动态字符串SDSList类型 - 双向链表 & 压缩列表Set类型 - …

布丁扫描:手机扫描的纯净之选

在众多手机扫描软件中&#xff0c;布丁扫描凭借其纯粹的使用体验脱颖而出。它是一款功能强大且完全免费的手机端扫描工具&#xff0c;没有任何广告干扰&#xff0c;用户可以畅享纯净的使用过程。更值得一提的是&#xff0c;布丁扫描从未设置过充值入口&#xff0c;也不会在扫描…

用Kibana实现Elasticsearch索引的增删改查:实战指南

在大数据时代&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;和 Kibana 作为强大的数据搜索与可视化工具&#xff0c;受到了众多开发者的青睐。Kibana 提供了一个直观的界面&#xff0c;可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…

蛋糕商城 Rust 版介绍

蛋糕商城 Rust 版介绍 蛋糕商城是一个在大学生学习者中流行的 JSP&#xff0c;JSTL&#xff0c;JDBC 的开源项目。由于原作者并未签名&#xff0c;所以原作者未知。蛋糕商城虽说比较简单&#xff0c;但是界面比较美观&#xff0c;核心业务表述清晰&#xff0c;是一款非常优秀的…

大模型推理——MLA实现方案

1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…