2010-09-25 102 views
1

我在VMware中有一个实验室环境,带有一个WS2008R2服务器和一个W7客户端。我试图从服务器广播一个WCF服务地址并在客户端接收这个地址。我在C#.NET中使用System.Net.Sockets,我可以成功地从服务器发送数据。至少我用WinDump很好。但是,当我尝试在客户端上收到它时,它会失败。我不知道问题在哪里..?如果我手动输入地址,客户端可以通过其他方式与我的WCF服务进行通信。为了以防万一,我已经在实验室环境中关闭了防火墙。WCF服务地址的UDP广播

[更新]

我检查WinDump的在我的客户端虚拟机,相同的UDP消息,因此似乎能够接收广播这里showes起来为好。但为什么ReceieveFrom方法没有返回任何东西?我是否设置了客户端套接字错误?它应该绑定到任何地址或其本地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); 
    } 
} 

回答

4

我不知道在您当前的问题但是通过阅读你的问题,我立刻知道你正在重新发明轮子。升级到.NET 4.0,并使用WCF Discovery,这正是为此目的 - 基于UDP的服务搜索服务与合同和基于UDP的announcements服务。此外,它基于WS-Discovery协议,因此我认为它应该可以互操作。它不比定制解决方案好吗?

+0

啊我怎么会错过了!谢谢! – 2010-09-26 07:25:26