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);
}
}