我在VMware中有一个实验室环境,有一个WS2008R2服务器和一个W7客户机。我正在尝试从服务器广播WCF服务地址,并在客户端中接收该地址。我在c.net中使用system.net.sockets,我可以成功地从服务器发送数据。至少我对温杜普没意见。但是当我尝试在客户机上接收这个消息时失败了。我不明白问题在哪里….如果我手动输入服务器的地址,客户端可以通过其他方式与服务器以及我的WCF服务通信。为了以防万一,我把实验室的防火墙关掉了。
[更新]
我检查了我的客户机vm上的windump,同样的udp消息也显示在这里,所以它似乎能够接收广播。但是为什么ReceiveFrom方法没有返回任何内容呢?我是否设置了错误的客户端套接字?它应该绑定到任何地址还是本地IP?两者都不起作用…
[更新]
服务器代码如下:
public static class MulticastServer
{
static Socket socket;
static IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, 9050);
public static void Open()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
}
public static void Send(string message)
{
socket.SendTo(Encoding.ASCII.GetBytes(message), ep);
}
public static void Close()
{
socket.Close();
}
}
客户:
public static class MulticastClient
{
public static string ReceiveOne()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 9050);
socket.Bind(ep);
byte[] data = new byte[1024];
EndPoint e = (EndPoint)ep;
int i = socket.ReceiveFrom(data, ref e);
socket.Close();
return Encoding.ASCII.GetString(data, 0, i);
}
}