Get client IP from UDP packages received with UdpClient

24,822

Solution 1

In your example, when a client connects, the anyIP IPEndPoint object will contain the address and port of the client connection.

Solution 2

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

Share:
24,822
magnattic
Author by

magnattic

Working mostly on the web. Passionate about technology and innovation.

Updated on August 28, 2020

Comments

  • magnattic
    magnattic over 3 years

    I am developing an action multiplayer game with the help of the System.Net.Sockets.UdpClient class.

    It's for two players, so one should open a server and wait for incoming connections. The other player inputs the host IP and tries to send a "ping", to make sure a connection is possible and there is an open server. The host then responds with a "pong".

    Once the game is running, both have to send udp messages to each other, so they both need the opponents ip address.

    Of course the server could also input the clients IP, but that seems unneccessary to me.

    How can I get the clients IP from the udp package when the "ping" message is received?

    Here is my receiving code (server waiting for 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();
                 }
            }
        }