`
starnc
  • 浏览: 145169 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

UDP用同一端口收发数据 c#

    博客分类:
  • .NET
 
阅读更多

之前用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编程收发数据

    在本文中,我们将深入探讨如何在C#中使用UDP(用户数据报协议)进行socket编程,以便收发数据。UDP是一种无连接的、不可靠的传输层协议,它提供了较低的延迟和较高的吞吐量,适合实时数据传输或对顺序传输要求不高的...

    C# UDP多线程发送接收

    3. 使用C#的System.Net.Sockets命名空间中的UdpClient类来操作UDP。 二、C# UDP通信 1. 创建UdpClient对象:`UdpClient udpClient = new UdpClient(port);`,其中port是服务器监听的端口号。 2. 发送数据:`udp...

    C#编写上位机使用UDP给单片机发送Json格式数据

    在本文中,我们将深入探讨如何使用C#编程语言来构建一个上位机应用程序,通过UDP协议向单片机发送Json格式的数据。UDP(User Datagram Protocol)是一种无连接的传输层协议,适合于实时数据传输,因为它提供了较低的...

    c#UDP异步发送接收

    在编程领域,网络通信是不可或缺的一部分,而C#作为.NET框架的主要编程语言,提供了丰富的库来支持各种网络通信协议,包括UDP(用户数据报协议)。本文将深入探讨C#中如何实现UDP的异步发送和接收,这对于构建实时、...

    c# UDP组播的发送和接收(使用socket 类)

    在C#编程中,UDP(用户数据报协议)是一种无连接的、不可靠的网络通信协议,常用于实时数据传输,如视频流或在线游戏。本文将深入探讨如何使用Socket类来实现UDP组播的发送和接收,并且讨论如何指定特定的网络接口...

    C# udp方式大文件传输

    在C#中,我们可以创建`UdpClient`实例,然后使用`Connect()`方法指定服务器的IP地址和端口号。由于UDP是无连接的,`Connect()`在这里主要用来设置默认的目标地址,方便后续的发送操作。然后,我们可以通过`Send()`...

    C#socketUdp异步消息发送接收

    C#是一种广泛用于构建桌面和Web应用程序的编程语言,它提供了强大的网络通信支持,其中包括使用UDP(用户数据报协议)进行异步消息发送和接收。本文将深入探讨C#中如何利用Socket API实现UDP异步通信,以及相关的...

    C#服务端收发数据

    本文将深入探讨如何使用C#实现服务端的数据收发功能,包括启动端口监听、接收与发送数据、十六进制的处理以及异步操作。 首先,让我们理解“端口监听”这一概念。端口监听是指一个网络服务在特定的TCP或UDP端口上...

    C#实现udp广播收集局域网类所有设备信息

    制定udp广播的端口(如果收发用同一个端口就会一直接收到自己给自己广播的消息)2.启动后向局域网广播约定的字符串(字符串包含了广播端的IP和用来接收响应的端口号)3.设备需要内置一个功能,打开约定的接收广播...

    C/C++ 发送UDP数据与接收UDP数据完整代码(支持指定网卡)

    在使用这些类时,开发者需要创建对象,初始化参数如目标地址、端口和网卡,然后调用相应的方法发送或接收数据。由于代码未给出具体实现,这里只能提供一个大概的框架。 总结来说,这个代码片段提供了在Linux系统下...

    Udp简单收发器

    每个UDP数据包包含源和目的端口号,用于区分同一主机上的多个UDP应用。 ### `UdpClient`类 在C#中,`UdpClient`类是.NET Framework提供的一个用于处理UDP通信的类,它可以用于发送和接收UDP数据包。`UdpClient`类的...

    c#通过UDP协议接收发送信息

    本示例将聚焦于如何使用C#语言实现基于UDP的通信功能,并结合Windows Forms创建一个用户界面来收发消息和处理数据包。 首先,我们要理解UDP的特点。UDP是一种无连接的协议,这意味着它不需要在发送数据前建立连接,...

    C# WPF Socket UDP通讯

    在本文中,我们将深入探讨如何使用C#的WPF(Windows Presentation Foundation)框架结合Socket UDP通信来实现与康耐视相机的实时无协议通讯。这是一个关键的技术应用,尤其是在工业自动化和图像处理领域。 首先,...

    C#Udp分包传输大文件

    - 客户端:使用`UdpClient`创建一个实例,设置目标IP地址和端口号,然后调用`Send()`方法发送数据。 - 服务端:同样使用`UdpClient`,设置监听的本地IP地址和端口号,调用`Receive()`方法接收数据。 2. **分包...

    C#UDP通讯多编码收发一体客户端

    项目中需要接收对方发过来udp消息的功能,便网上找代码做了个测试发送接收UDP的简单小程序.填入对方接收ip和端口,就可以发送消息.本地绑定一个端口(代码里改),接收所有发送到该端口的消息.分为unicode,utf8,gb2312三...

    C# TCP UDP专用的调试工具说明书(用前必读)

    C# TCP UDP 调试工具使用说明书 本资源为 C# 语言开发的 TCP UDP 调试工具使用说明书,旨在帮助开发者快速掌握该工具的使用方法和原理。 TCP 通信测试 TCP 通信测试是该工具的主要功能之一。该工具提供了 TCP ...

    c#Udp socket通信配合订阅者模式广播及收发信息

    本文将深入探讨C#中的UDP(用户数据报协议)套接字通信,以及如何结合订阅者模式实现广播和信息收发。让我们首先了解UDP通信协议,然后探讨C#中的实现,最后讨论订阅者模式在该场景中的应用。 UDP是一种无连接的、...

    一个完整的UDP收发数据的例子

    本示例旨在为初学者提供一个完整的UDP数据收发的实践教程。 首先,理解UDP的基本原理至关重要。与TCP(Transmission Control Protocol)不同,UDP是无连接的,这意味着在数据传输之前,发送方和接收方之间不需要...

    C#中使用UDP通信

    创建一个`UdpClient`对象并指定端口号,可以开始收发数据: ```csharp UdpClient udpClient = new UdpClient(12345); // 创建一个监听12345端口的UDP客户端 ``` 发送数据到指定的IP和端口: ```csharp byte[] ...

    TCP,UDP协议聊天室程序(C#)

    对于UDP通信,C#的Socket类同样提供了Bind()方法来绑定本地端口,然后使用BeginSendTo()和EndSendTo()进行数据发送,BeginReceiveFrom()和EndReceiveFrom()用于数据接收。由于UDP是无连接的,因此不需要建立连接过程...

Global site tag (gtag.js) - Google Analytics