У меня есть программа, которая отправляет сообщение серверу, и сервер узнает, что сообщение интранет его и отправляет обратно сообщение на порт, который он прослушивал с самого начала. так, скажем, клиент отправляет с порта 5000. Сервер будет читать сообщение с порта 5000 и отправить сообщение на порт, который клиент использовал для отправки сообщения, чтобы клиент мог его получить. Теперь мой вопрос заключается в том, что я не хочу исправлять порт для сервера (я не хочу, чтобы сервер всегда отправлял обратно клиенту на порт 1000), так как я могу узнать, какой порт мой клиент использовал для отправки сообщения каждый раз? Итак, в моем клиенте мой UdpClient Listener = новый UdpClient (xxx) [(xxxx), являющийся номером порта], может быть заполнен новым значением каждый раз? значение порта он используется для отправки сообщенияКак узнать, какой порт UDP используется для отправки сообщения
благодаря
вот моя программа:
private const int sendPort = 9999;
static void Main(string[] args)
{
Boolean done = false;
IPAddress send_to_address = IPAddress.Parse("xx.xxx.xxx.xxx");
IPEndPoint sending_end_point = new IPEndPoint(send_to_address, sendPort);
IPEndPoint receiving_end_point = new IPEndPoint(IPAddress.Any, 0);
UdpClient Listener = new UdpClient(WHAT TO PUT HERE???);
while (!done)
{
Socket sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Console.WriteLine("Enter text to send");
string text_to_send = Console.ReadLine();
// the socket object must have an array of bytes to send.
// this loads the string entered by the user into an array of bytes.
byte[] send_buffer = Encoding.ASCII.GetBytes(text_to_send);
// Remind the user of where this is going.
Console.WriteLine("sending to address: {0} port: {1}", sending_end_point.Address, sending_end_point.Port);
sending_socket.SendTo(send_buffer, sending_end_point);
Console.WriteLine("Message has been sent to the broadcast address");
Console.WriteLine("Now we are waiting for a message back from the Listener");
// here we receive the Message from the Server
Byte[] ByteFromListener = Listener.Receive(ref receiving_end_point);
string datafromreceiver = Encoding.ASCII.GetString(ByteFromListener);
Console.WriteLine(Datafrom receiver)
}
}
}
}
каждый пакет должен иметь 4 порции данных в нем, как минимум. Исходный IP и порт, а также IP-адрес и порт назначения. не имеет значения, какой порт ваш клиент решил использовать - сервер получит эту информацию в заголовках пакетов, чтобы он знал, куда отправить ответ. –
Не можете ли вы использовать информацию 'IPEndPoint'? – itsme86
Я понимаю, но теперь клиент слушает сообщение с сервера, как я знаю, какой порт я использую для клиента, чтобы вернуть сообщение? – George