Consider the following code:
client.Send(data, data.Length, endpoint);
byte[] response = client.Receive(ref endpoint);
While, according to
probably the remote host has firewall then couldn't response to request, before send request set the
client.Client.ReceiveTimeout = 5000;
so when the response couldn't get the request you have a exception
You probably want to setup two UdpClients: one for listening, one for sending.
For the receiving UdpClient, use the constructor that takes a port.