2010-09-25 103 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