1

私は一般的にソケットと C# を初めて使用し、単純な upd リスナー関数を実装するのに苦労しています。私は多くの時間をオンライン検索に費やしてきました. したがって、提案、リンク、例は大歓迎です!

この時点で、アプリケーション サーバーの場所に関する情報 (ServerName、IP アドレスなど) を含む一般的な UPD メッセージをポート 6600 経由でブロードキャストするサード パーティ アプリケーションがあります。UPD ブロードキャストをキャプチャし、将来の処理に使用できる利用可能なサーバーのコレクションを生成するように、リスナー クライアント アプリケーションを設計したいと考えています。

私が抱えている問題は、listener.Listen(0) を使用してリスナーを作成しようとすると、失敗して一般的なタイプのエラーが発生することです。UdpClient クラスを使用しようとすると、アプリケーションがハングし、データが返されません。両方の例のコードを以下に示します。

namespace UDPListener
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            listener.Bind(new IPEndPoint(IPAddress.Any, 6600));
            listener.Listen(6);
            Socket socket = listener.Accept();
            Stream netStream = new NetworkStream(socket);
            StreamReader reader = new StreamReader(netStream);

            string result = reader.ReadToEnd();
            Console.WriteLine(result);
            socket.Close();
            listener.Close();

        }
    }
}

UdpClient:

private void IdentifyServer()
    {
        //Creates a UdpClient for reading incoming data.
        UdpClient receivingUdpClient = new UdpClient(6600);

        //Creates an IPEndPoint to record the IP Address and port number of the sender.  
        // The IPEndPoint will allow you to read datagrams sent from any source.
        IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
        try
        {

            // Blocks until a message returns on this socket from a remote host.
            Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);

            string returnData = Encoding.ASCII.GetString(receiveBytes);

            Output.Text = ("This is the message you received " +
                                        returnData.ToString());
            Output.Text = ("This message was sent from " +
                                        RemoteIpEndPoint.Address.ToString() +
                                        " on their port number " +
                                        RemoteIpEndPoint.Port.ToString());
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
4

1 に答える 1

0

dtbは絶対に書きました!多くの調査と友人の助けを借りて、私が実際に探していたのはマルチキャストのソリューションであることに気付きました。以下のリンクを含めます。

@dtb、正しい方向に向けてくれてありがとう!

http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C

http://codeidol.com/csharp/csharp-network/IP-Multicasting/Csharp-IP-Multicast-Support/

于 2012-09-27T17:19:54.237 に答える