How to send packet to client with private ip?

481 Views Asked by At

I make client and server in c# and i want to send packets between this 2 applications. When client send message to server everything is good, server accept it. But when server try to reply, client not receive message. I think, it is problem because i have private ip (i am not sure, but i think it is NAT - 1 ip and a lot of computers) and my server is running on my VPS. So, how to reply to client from server?

Client Code:

    void SendDataToServer(string Message)
    {
        IPAddress Ip = Dns.GetHostEntry("mydomain.com").AddressList[0];
        int Port = 1234;
        IPEndPoint Server = new IPEndPoint(Ip, Port);

        byte[] MessageInBytes = Encoding.UTF8.GetBytes(Message);
        MySocket.SendTo(MessageInBytes, Server);
    }

    void ReceiveDataFromServer(int Port) // this is running in background
    {
        UdpClient Client = new UdpClient(Port);
        IPEndPoint Server = new IPEndPoint(IPAddress.Any, Port);
        try
        {
            while (true)
            {
                byte[] MessageInBytes = Client.Receive(ref Server);
                string Message = Encoding.UTF8.GetString(MessageInBytes, 0, MessageInBytes.Length);
                MessageBox.Show(Message);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e);
        }
    }

Server Code:

    static void StartReceiveing(int Port) // this is running in background
    {
        UdpClient Server = new UdpClient(Port);
        IPEndPoint Client = new IPEndPoint(IPAddress.Any, Port);

        try
        {
            while (true)
            {
                byte[] MessageInBytes = Server.Receive(ref Client);
                string Message = Encoding.UTF8.GetString(MessageInBytes, 0, MessageInBytes.Length);
                Console.WriteLine("Received message: " + Message);
                Task.Run(() => ReplyToClient("some text", Client));
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

    static void ReplyToClient(string Message, IPEndPoint Client)
    {
        try
        {
            byte[] MessageInBytes = Encoding.UTF8.GetBytes(Message);
            NetClient.SendTo(MessageInBytes, Client);

            Console.WriteLine("Sending reply: " + Message);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }
0

There are 0 best solutions below