【发布时间】:2013-10-02 19:15:18
【问题描述】:
我正在尝试发送广播以联系我的应用程序的其他实例。我在 Mac 上的 Mono 3 控制台程序中运行下面的代码(但也在 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 ();
}
}
}
【问题讨论】:
-
它在构造函数调用时挂起?还是程序崩溃了?您是否将调用封装在
try/catch中以查看它是否引发异常? -
@JimMischel 我修改了这个问题。代码错了。现在它只是没有收到任何东西。
-
您的应用程序与您的应用程序的其他实例之间有什么关系?是同一个主机吗?同一交换机、路由器、LAN 上的主机?它可能是网络配置的事情,而不是代码的事情。我将通过 wireshark 验证数据包是否在应用程序的两个主机上的端口 667 上通过网络进出。广播不会在冲突域之外转发。
-
您可能会发现这很有用:stackoverflow.com/q/687868/56778。除此之外,我不知道。
-
@glace 我在同一台机器上试了试,所以中间什么都没有,而且从 Mac 到同一 WLAN 上的笔记本。
标签: c# networking mono udp