1

我正在尝试发送广播以联系我的应用程序的其他实例。我在 Mac 上的 Mono 3 Console 程序中运行下面的代码(但也在 Windows 上尝试过 VS2012)。但是,从未收到该消息。接收者只是坐在那里并在通话中阻塞

byte[] data = udpClient.Receive (ref endPoint);

编辑:

我试过:

var recipient = new IPEndPoint (new IPAddress(new byte[] {192, 255, 255, 255}), 1667);

并且还添加了

udpClient.EnableBroadcast = true;

给发件人。仍然:没有收到任何东西。就是这样。有什么建议吗?

using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace NetworkServiceTest_Console
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Task.Run (() => Receiver ());
            Task.Run (() => {
                while(true)
                {
                    Sender ();
                    Thread.Sleep(1000);
                }
            });



            Console.ReadLine ();
        }

        static void Sender()
        {
            Console.WriteLine ("Sending...");
            var recipient = new IPEndPoint (IPAddress.Broadcast, 667);
            var udpClient = new UdpClient ();

            var data = Encoding.UTF8.GetBytes("Hallo world!");
            int bytesSent = udpClient.Send (data, data.Length, recipient);
            udpClient.Close ();
            Console.WriteLine ("{0} bytes sent", bytesSent);
        }

        static void Receiver()
        {
            Console.WriteLine ("Receiving...");
            var udpClient = new UdpClient ();
            var endPoint = new IPEndPoint(IPAddress.Any, 667);
            byte[] data = udpClient.Receive (ref endPoint);
            Console.WriteLine ("Received '{0}'.", Encoding.UTF8.GetString (data));
            udpClient.Close ();
        }
    }
}
4

2 回答 2

3

这应该可以解决问题:

static void Receiver( )
{
    Console.WriteLine( "Receiving..." );
    var udpClient = new UdpClient( 667 );
    var endPoint = new IPEndPoint( IPAddress.Any, 0 );
    byte[] data = udpClient.Receive( ref endPoint );
    Console.WriteLine( "Received '{0}'.", Encoding.UTF8.GetString( data ) );
    udpClient.Close( );
}

在 UdpClient 构造函数中提供端口号,而不是在 Receive() 方法中。接收的端点似乎用作输出参数,而不是输入参数。

于 2013-10-03T09:47:23.510 回答
1

我在那里看到两个可能的问题:

  1. 您必须设置UdpClient.EnableBroadcasttrue. 请参阅msdn
  2. 1024 以下的端口有特权,您可能需要额外的权限。使用 1024 以上的端口进行测试。

如果它仍然不起作用,则使用网络嗅探器(例如,wireshark)来分析流量。

于 2013-10-02T22:31:26.013 回答