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数据通过这个端口。

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

你可能感兴趣的:(C#系列,单片机,嵌入式硬件,开发语言,c#)