我正在尝试发送广播以联系我的应用程序的其他实例。我在Mac上的Mono 3 Console程序中运行下面的代码(但也尝试在Windows上使用VS2012)。但是,该消息从未收到。接收器只是坐在那里,并阻止在呼叫UDP广播从未收到 - 代码有什么问题?
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();
}
}
}
它挂在那个构造函数调用?或者程序崩溃了?你是否将调用包装在'try/catch'中以查看它是否抛出异常? –
@JimMischel我修改了这个问题。代码错了。现在它只是没有收到任何东西。 – Krumelur
你的应用程序和你的应用程序的其他实例之间有什么?它是同一个主机吗?主机在同一个交换机,路由器,局域网?它可能是一个网络配置的东西,而不是代码的东西。我会通过wireshark验证数据包是在您的应用程序的两台主机上通过端口667上的线路传输的。广播不会在冲突域之外转发。 –