5

System.Net.Sockets.UdpClientクラスを使用してアクション マルチプレイヤー ゲームを開発しています。

2 人用なので、1 人がサーバーを開いて接続を待つ必要があります。他のプレイヤーは、ホスト IP を入力して「ping」を送信し、接続が可能であり、サーバーが開いていることを確認します。次に、ホストは「ポン」で応答します。

ゲームが実行されると、両方が相互に udp メッセージを送信する必要があるため、両方とも対戦相手の IP アドレスが必要になります。

もちろん、サーバーはクライアントの IP を入力することもできますが、それは私には不必要に思えます。

「ping」メッセージを受信したときに、udp パッケージからクライアント IP を取得するにはどうすればよいですか?

これが私の受信コードです(pingを待機しているサーバー):

    private void ListenForPing()
    {
        while (!closeEverything)
        {
             var deserializer = new ASCIIEncoding();
             IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
             byte[] recData = udp.Receive(ref anyIP);
             string ping = deserializer.GetString(recData);
             if (ping == "ping")
             {
                 Console.WriteLine("Ping received.");
                 InvokePingReceiveEvent();
             }
        }
    }
4

2 に答える 2

15

あなたの例では、クライアントが接続すると、anyIP IPEndPoint オブジェクトにクライアント接続のアドレスとポートが含まれます。

于 2011-05-11T13:20:06.280 に答える
6
private void ListenForPing()
{
    while (!closeEverything)
    {

         IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
         byte[] recData = udp.Receive(ref anyIP);
         string ping = Encoding.ASCII.GetString(recData);
         if (ping == "ping")
         {
             Console.WriteLine("Ping received.");
             Console.WriteLine("Ping was sent from " + anyIP.Address.ToString() +
                             " on their port number " + anyIP.Port.ToString());
             InvokePingReceiveEvent();
         }
    }
}

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.receive.aspx

于 2011-05-11T13:52:45.047 に答える