之前用UdpClient,发现当开了一个端口用于监听接收,则不能再用来发送(反之亦然)。这样对于简单的收发信息来说无问题,但如果需要nat穿透的程序,则变得困难。用Socket类则不存在该问题,参考下面示例代码:
class Program
{
static void Main(string[] args)
{
SocketTest test = new SocketTest();
test.StartReceive();
Console.WriteLine("请输入对端口号,准备发送:");
string port = Console.ReadLine();
test.SendData(Encoding.UTF8.GetBytes("你好吗?"), IPAddress.Parse("127.0.0.1"), Convert.ToInt32(port));
Console.ReadKey(true);
}
}
public class SocketTest
{
private Socket _socket;
IPEndPoint _local = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5238);
Thread _receiveThread = null;
public void StartReceive()
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
_receiveThread = new Thread(Receive);
_receiveThread.Start();
}
public void SendData(byte[] data, IPAddress remoteIP, int remotePort)
{
_socket.SendTo(data, new IPEndPoint(remoteIP, remotePort));
}
public void Close()
{
if (_receiveThread != null)
_receiveThread.Abort();
if (_socket != null)
_socket.Close();
}
private void Receive()
{
_socket.Bind(_local);
Console.WriteLine("开始接收。。。");
while (true)
{
byte[] buffer = new byte[1024];
EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));
int len = _socket.ReceiveFrom(buffer, ref remoteEP);
IPEndPoint ipEndPoint = remoteEP as IPEndPoint;
Console.WriteLine("收到消息:客户机IP--{0},,端口--{1}", ipEndPoint.Address.ToString(), ipEndPoint.Port.ToString());
Console.WriteLine("消息内容:{0}", Encoding.UTF8.GetString(buffer, 0, len));
}
}
}
转载: http://harvey8819.blog.163.com/blog/static/162365181201123121635983/
分享到:
相关推荐
在本文中,我们将深入探讨如何在C#中使用UDP(用户数据报协议)进行socket编程,以便收发数据。UDP是一种无连接的、不可靠的传输层协议,它提供了较低的延迟和较高的吞吐量,适合实时数据传输或对顺序传输要求不高的...
3. 使用C#的System.Net.Sockets命名空间中的UdpClient类来操作UDP。 二、C# UDP通信 1. 创建UdpClient对象:`UdpClient udpClient = new UdpClient(port);`,其中port是服务器监听的端口号。 2. 发送数据:`udp...
在本文中,我们将深入探讨如何使用C#编程语言来构建一个上位机应用程序,通过UDP协议向单片机发送Json格式的数据。UDP(User Datagram Protocol)是一种无连接的传输层协议,适合于实时数据传输,因为它提供了较低的...
在编程领域,网络通信是不可或缺的一部分,而C#作为.NET框架的主要编程语言,提供了丰富的库来支持各种网络通信协议,包括UDP(用户数据报协议)。本文将深入探讨C#中如何实现UDP的异步发送和接收,这对于构建实时、...
在C#编程中,UDP(用户数据报协议)是一种无连接的、不可靠的网络通信协议,常用于实时数据传输,如视频流或在线游戏。本文将深入探讨如何使用Socket类来实现UDP组播的发送和接收,并且讨论如何指定特定的网络接口...
在C#中,我们可以创建`UdpClient`实例,然后使用`Connect()`方法指定服务器的IP地址和端口号。由于UDP是无连接的,`Connect()`在这里主要用来设置默认的目标地址,方便后续的发送操作。然后,我们可以通过`Send()`...
C#是一种广泛用于构建桌面和Web应用程序的编程语言,它提供了强大的网络通信支持,其中包括使用UDP(用户数据报协议)进行异步消息发送和接收。本文将深入探讨C#中如何利用Socket API实现UDP异步通信,以及相关的...
本文将深入探讨如何使用C#实现服务端的数据收发功能,包括启动端口监听、接收与发送数据、十六进制的处理以及异步操作。 首先,让我们理解“端口监听”这一概念。端口监听是指一个网络服务在特定的TCP或UDP端口上...
制定udp广播的端口(如果收发用同一个端口就会一直接收到自己给自己广播的消息)2.启动后向局域网广播约定的字符串(字符串包含了广播端的IP和用来接收响应的端口号)3.设备需要内置一个功能,打开约定的接收广播...
在使用这些类时,开发者需要创建对象,初始化参数如目标地址、端口和网卡,然后调用相应的方法发送或接收数据。由于代码未给出具体实现,这里只能提供一个大概的框架。 总结来说,这个代码片段提供了在Linux系统下...
每个UDP数据包包含源和目的端口号,用于区分同一主机上的多个UDP应用。 ### `UdpClient`类 在C#中,`UdpClient`类是.NET Framework提供的一个用于处理UDP通信的类,它可以用于发送和接收UDP数据包。`UdpClient`类的...
本示例将聚焦于如何使用C#语言实现基于UDP的通信功能,并结合Windows Forms创建一个用户界面来收发消息和处理数据包。 首先,我们要理解UDP的特点。UDP是一种无连接的协议,这意味着它不需要在发送数据前建立连接,...
在本文中,我们将深入探讨如何使用C#的WPF(Windows Presentation Foundation)框架结合Socket UDP通信来实现与康耐视相机的实时无协议通讯。这是一个关键的技术应用,尤其是在工业自动化和图像处理领域。 首先,...
- 客户端:使用`UdpClient`创建一个实例,设置目标IP地址和端口号,然后调用`Send()`方法发送数据。 - 服务端:同样使用`UdpClient`,设置监听的本地IP地址和端口号,调用`Receive()`方法接收数据。 2. **分包...
项目中需要接收对方发过来udp消息的功能,便网上找代码做了个测试发送接收UDP的简单小程序.填入对方接收ip和端口,就可以发送消息.本地绑定一个端口(代码里改),接收所有发送到该端口的消息.分为unicode,utf8,gb2312三...
C# TCP UDP 调试工具使用说明书 本资源为 C# 语言开发的 TCP UDP 调试工具使用说明书,旨在帮助开发者快速掌握该工具的使用方法和原理。 TCP 通信测试 TCP 通信测试是该工具的主要功能之一。该工具提供了 TCP ...
本文将深入探讨C#中的UDP(用户数据报协议)套接字通信,以及如何结合订阅者模式实现广播和信息收发。让我们首先了解UDP通信协议,然后探讨C#中的实现,最后讨论订阅者模式在该场景中的应用。 UDP是一种无连接的、...
本示例旨在为初学者提供一个完整的UDP数据收发的实践教程。 首先,理解UDP的基本原理至关重要。与TCP(Transmission Control Protocol)不同,UDP是无连接的,这意味着在数据传输之前,发送方和接收方之间不需要...
创建一个`UdpClient`对象并指定端口号,可以开始收发数据: ```csharp UdpClient udpClient = new UdpClient(12345); // 创建一个监听12345端口的UDP客户端 ``` 发送数据到指定的IP和端口: ```csharp byte[] ...
对于UDP通信,C#的Socket类同样提供了Bind()方法来绑定本地端口,然后使用BeginSendTo()和EndSendTo()进行数据发送,BeginReceiveFrom()和EndReceiveFrom()用于数据接收。由于UDP是无连接的,因此不需要建立连接过程...