当前位置: 首页 > article >正文

C#系列-C#操作UDP发送接收数据(10)

 C#中,发送UDP数据并接收响应通常涉及创建两个UdpClient实例:一个用于发送数据,另一个用于接收响应。以下是发送UDP数据并接收响应的示例代码:

首先,我们需要定义一个方法来发送UDP数据,并等待接收服务器的响应。在这个示例中,我们将发送数据到服务器的指定端口,并尝试在相同的端口上接收响应。

csharp代码

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

class Program

{

static void Main()

{

// UDP客户端用于发送和接收数据

UdpClient udpClient = new UdpClient();

try

{

// 要发送的数据

string messageToSend = "Hello, UDP Server!";

byte[] bytesToSend = Encoding.ASCII.GetBytes(messageToSend);

// 服务器的IP地址和端口

IPAddress serverIp = IPAddress.Parse("服务器的IP地址"); // 替换为实际的服务器IP地址

int serverPort = 12345; // 替换为实际的服务器端口号

// 发送数据到服务器

udpClient.Connect(serverIp, serverPort);

udpClient.Send(bytesToSend, bytesToSend.Length);

// 等待并接收服务器的响应

Console.WriteLine("Waiting for server response...");

byte[] receivedBytes = udpClient.Receive(ref serverIp);

string receivedMessage = Encoding.ASCII.GetString(receivedBytes);

// 输出接收到的响应

Console.WriteLine("Server response: " + receivedMessage);

}

catch (Exception ex)

{

Console.WriteLine("Error sending or receiving UDP message: " + ex.Message);

}

finally

{

// 关闭UdpClient

udpClient.Close();

}

}

}

在这个示例中,我们首先创建了一个UdpClient实例,然后定义了要发送的消息的内容和服务器的IP地址及端口。我们调用UdpClient.Connect方法连接到服务器,并使用UdpClient.Send方法发送数据。

发送数据后,我们使用UdpClient.Receive方法等待并接收服务器的响应。这个方法会阻塞当前线程,直到收到数据为止。一旦收到数据,我们将其转换为字符串并输出到控制台。

请注意,这个示例假设服务器会在相同的端口上发送响应。如果服务器使用不同的端口发送响应,你需要在Receive方法中指定正确的端口号。

此外,请确保替换代码中的"服务器的IP地址"12345为实际的服务器IP地址和端口号。

在实际应用中,你可能需要处理超时情况,例如,如果服务器没有在合理的时间内响应,你可能需要实现一个超时机制来中断等待并继续执行其他任务。这可以通过使用UdpClient.ReceiveAsync方法和异步编程模式来实现。

要接收UDP发送来的数据,你需要创建一个UdpClient实例并绑定到一个本地端口上,然后循环等待数据到达。以下是一个C#示例,展示了如何创建一个UDP接收器来监听指定端口上的传入数据:

csharp代码

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

class Program

{

static void Main()

{

// 定义本地端口号

int localPort = 11000;

try

{

// 创建一个UdpClient并绑定到本地端口

UdpClient udpClient = new UdpClient(localPort);

IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, localPort);

Console.WriteLine("UDP server listening on port " + localPort);

// 循环接收数据

while (true)

{

// 阻塞,直到收到数据

byte[] receivedBytes = udpClient.Receive(ref remoteEndPoint);

string receivedData = Encoding.ASCII.GetString(receivedBytes);

// 输出接收到的数据

Console.WriteLine("Received data from {0}:{1}", remoteEndPoint.Address, receivedData);

}

}

catch (Exception ex)

{

Console.WriteLine("Error receiving UDP data: " + ex.Message);

}

}

}

在这个示例中,我们创建了一个UdpClient实例,并将其绑定到本地端口11000。然后,我们创建了一个IPEndPoint对象,用于表示可能发送数据到我们的UDP服务器的远程端点。我们将IPAddress.Any传递给IPEndPoint的构造函数,表示我们愿意接收来自任何IP地址的数据。

接下来,我们进入一个无限循环,在循环中调用UdpClient.Receive方法来等待并接收数据。这个方法会阻塞当前线程,直到有数据到达。一旦收到数据,我们就将其从字节转换为字符串,并输出到控制台。

请注意,你需要根据你的实际需求来选择本地端口号,并确保这个端口没有被其他应用程序使用,同时还需要确保你的防火墙或路由器设置允许UDP数据通过这个端口。

此外,由于这个示例中的循环是无限的,你需要在某个时刻退出循环以关闭程序。在实际应用中,你可能会想要添加一个适当的退出条件,比如监听某个特定的命令或信号来优雅地关闭程序。


http://www.kler.cn/a/233832.html

相关文章:

  • const限定符-C语言中指针的“可变与不可变”法则
  • MySQ怎么使用语法介绍(详细)
  • Android 下内联汇编,Android Studio 汇编开发
  • NCC前端调用查询弹框
  • 【考研数学:高数2】数列极限
  • C 语言标准库 - <errno.h>
  • C++入门篇(4)—— 类与对象(1)
  • Spring Boot 实现热插拔 AOP
  • 【机器学习】Ubuntu系统下CUDA驱动卸载及重装
  • 上线GPT应用的流程
  • 【北邮鲁鹏老师计算机视觉课程笔记】03 edge 边缘检测
  • 深入浅出:Golang的Crypto/SHA256库实战指南
  • Linux第45步_通过搭建“DNS服务器”学习图形化配置工具
  • conda创建环境,查看环境,激活环境,查看包,复制环境,删除环境,查看cuda版本,查看pytorch版本
  • 蓝桥杯官网练习题(翻转)
  • ubuntu22.04@laptop OpenCV Get Started: 006_annotating_images
  • Nginx管理配置中多种变量学习
  • 梯度提升树系列7——深入理解GBDT的参数调优
  • 【漏洞复现】狮子鱼CMS某SQL注入漏洞01
  • redis双写一致
  • Deepin基本环境查看(八)【系统安全:房、车、查房、查车】
  • 2.9日学习打卡----初学RabbitMQ(四)
  • Unity报错Currently selected scripting backend (IL2CPP) is not installed
  • 【数据存储+多任务爬虫】
  • Jupyter的全面探索:从入门到高级应用
  • 数据结构——5.4 树、森林