1

私は、WS2008R2サーバーとW7クライアントを備えたVMwareのラボ環境を持っています。サーバーからWCF-service-addressをブロードキャストし、これをクライアントで受信しようとしています。C#.NETでSystem.Net.Socketsを使用していますが、サーバーからデータを正常に送信できます。少なくともWinDumpで大丈夫そうです。しかし、これをクライアントで受信しようとすると失敗します。問題がどこにあるのかわかりません。クライアントは、他の方法でサーバーと通信したり、アドレスを手動で入力した場合はWCFサービスと通信したりできます。念のため、ラボ環境でファイアウォールをオフにしました。

[アップデート]

client-vmでWinDumpを確認しましたが、同じudpメッセージがここにも表示されるので、ブロードキャストを受信できるようです。しかし、なぜReceieveFromメソッドが何かを返すのをやめたのでしょうか。クライアントソケットを間違って設定しましたか?Any-addressまたはそのローカル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

1 に答える 1

4

あなたの現在の問題がどこにあるのかはわかりませんが、あなたの質問を読むことで、あなたが車輪の再発明をしていることがすぐにわかりました。.NET 4.0にアップグレードし、まさにこの目的のためのWCFディスカバリーを使用します。UDPベースのサービスの検索と、サービスに関するUDPベースのアナウンスです。さらに、WS-Discoveryプロトコルに基づいているため、相互運用可能である必要があります。カスタムソリューションよりも優れていませんか?

于 2010-09-25T17:30:54.427 に答える