当前位置: 首页 > 知识库问答 >
问题:

c#udp无法接收

东郭凯捷
2023-03-14

我已经在互联网上搜索了一两个星期,想找到一个UDP客户端程序,它可以同时发送和接收数据,但是对于c#来说,没有关于这个主题的内容。在过去的几天里,我尝试创建一个UDP客户端,其中包含一个接收数据的线程。

发送UDP数据包效果很好,但程序无法接收我发送到的服务器,我相信服务器正在将所有数据包发送到不同的端口。

我如何修复这个程序?

有没有一种更简单的方法来进行UDP编程,比如用于TCP的StreamReader和StreamWriter?

    static void CONNECTudp()
    {
        Console.WriteLine("Host:");
        IPAddress ipAddress = Dns.Resolve(Console.ReadLine()).AddressList[0];
        Console.WriteLine("Port:");
        int Port = int.Parse(Console.ReadLine());
        IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Port);
        Thread UDPthread = new Thread(() => CONNECTudpthread(ipEndPoint));
        UDPthread.Start();
        UdpClient udp = new UdpClient();
        do
        {
            Byte[] sendBytes = Encoding.ASCII.GetBytes(Console.ReadLine());
            udp.Send(sendBytes, sendBytes.Length, ipEndPoint);
        } while (true);
    }

    static void CONNECTudpthread(IPEndPoint ipEndPoint)
    {
        UdpClient udp = new UdpClient();
        do
        {
            try
            {
                Byte[] receiveBytes = udp.Receive(ref ipEndPoint);

                string returnData = Encoding.ASCII.GetString(receiveBytes);
                Console.WriteLine(returnData);
            }
            catch (Exception)
            {
            }
        } while (true);
    }

共有1个答案

乜昆
2023-03-14

因为UDP是面向消息的,而不是面向流的,所以在UDP中使用StreamReader和StreamWriter并不是一种切实可行的方法。坚持使用示例中的面向消息的I/O是最好的。

代码中的问题是您正在使用两个不同的UdpClient实例来发送和接收。您没有显示UDP服务器代码,所以我也不能保证这是正确的。但是如果是这样,那么如果你把你的代码修复成更像下面这样的东西,它应该可以工作:

static void CONNECTudp()
{
    Console.WriteLine("Host:");
    IPAddress ipAddress = Dns.Resolve(Console.ReadLine()).AddressList[0];
    Console.WriteLine("Port:");
    int Port = int.Parse(Console.ReadLine());
    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Port);

    // Bind port immediately
    UdpClient udp = new UdpClient(0);

    // Pass UdpClient instance to the thread
    Thread UDPthread = new Thread(() => CONNECTudpthread(udp));
    UDPthread.Start();
    do
    {
        Byte[] sendBytes = Encoding.ASCII.GetBytes(Console.ReadLine());
        udp.Send(sendBytes, sendBytes.Length, ipEndPoint);
    } while (true);
}

static void CONNECTudpthread(UdpClient udp)
{
    do
    {
        try
        {
            // Though it's a "ref", the "remoteEP" argument is really just
            // for returning the address of the sender.
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
            Byte[] receiveBytes = udp.Receive(ref ipEndPoint);

            string returnData = Encoding.ASCII.GetString(receiveBytes);
            Console.WriteLine(returnData);
        }
        catch (Exception)
        {
        }
    } while (true);
}
 类似资料:
  • 我不知道是网络配置还是我的软件出了问题。 这是监听代码: 奇怪的是,在wireshark上,我可以看到:数据包已从发送到,并且设备已对此数据包作出响应--来自的数据包已发送到。使用bind(0.0.0.0,端口)似乎不能涵盖。我迷路了,一点主意都没有。 ifconfig为:

  • 我正在尝试使用UDP在Android上创建一个unix域套接字服务器和客户端。我需要客户端向服务器发送一条消息(“hi”),然后从服务器上向客户端发送数据。我已经成功地在两边创建了套接字,并且我能够在服务器上从客户端接收到一条短消息。然而,服务器上的recvfrom(…)没有填充结构体套接字*src_addr,socklen_t*addrlen参数。使用这些src_addr和addrlen的后续s

  • 我是一个使用python进行套接字编程的初学者。我正在做我的课程项目。我的项目的一部分需要用不同的端口发送和接收UDP消息。提供了名为robot的服务器程序,我需要编写名为student的客户端程序,它可以与机器人进行交互。因此,我不能显示服务器程序中的所有源代码。 这是服务器程序中与UDP套接字相关的部分 这是我的客户端程序。s3 是 UDP 套接字。我可以成功地向服务器程序发送消息,但无法从中

  • 我有一个示例代码如下,套接字绑定到IP10.10.88.11和端口9876。我用下面的wireshark测试了2种情况。两台电脑都在同一个子网中。 从同一PC发送UDP数据包(10.10.88.11)-UDP服务器能够接收 从另一台电脑发送UDP数据包(10.10.88.10)-UDP服务器无法接收,但Wireshark(在10.10.88.11)能够捕获数据包 我在网上搜索过,但找不到解决办法。

  • 我正在尝试接收通过LAN电缆连接的FPGA发送的UDP广播数据包。FPGA向端口5001发送连续数据包。 我的python接收器代码很简单: 我使用Wireshark进行了检查,发现PC接收数据包。但是,我的Python代码没有。我还检查了从另一个本地python代码发送数据包的情况(发送到相同的地址和端口),并且我的接收器获得了这些数据包。

  • 我已经在Minikube上部署了一个UDP套接字服务器。套接字服务绑定到端口2152。下面是description pod命令中的IP片段。 我的客户机与minikube运行在同一个VM上,无法与服务器通信。我在客户端使用服务器地址IP 172.17.0.3,端口为2152。我还尝试使用minikube IP 192.168.49.2将UDP数据从客户端发送到服务器。 请帮忙,这里有什么问题。