Данные UDP никогда не отправляются? - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь отправить HTTP-запрос GET с UDP (поскольку ответ от прослушивающего сервера не имеет значения, и я не хочу блокировать программу)

Это код:

System.Net.Sockets.UdpClient client = new System.Net.Sockets.UdpClient();

client.Connect("www.domainname.com", 80);
string request_header = "GET /ping.php HTTP/1.1\r\nHost: www.domainname.com\r\n\r\n";

byte[] stre = System.Text.Encoding.ASCII.GetBytes(request_header);
client.Send(stre, stre.Length);
System.Net.IPEndPoint RemoteIpEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0);
byte[] receiveBytes = client.Receive(ref RemoteIpEndPoint);
string returnData = System.Text.Encoding.ASCII.GetString(receiveBytes);
client.Close(); 

Во-первых, кажется, что запрос не получен на сервере, поэтому я думаю, что, возможно, что-то идет не так при отправке?Во-вторых, программа висит на client.Receive (ref RemoteIpEndPoint) и просто ждет там.Похоже, данные не получены.

Я пытался изменить ...

System.Net.IPEndPoint(System.Net.IPAddress.Any, 0);

на ...

System.Net.IPEndPoint(System.Net.IPAddress.Any, 80);

... но безуспешно.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Если вы не хотите блокировать клиент, используйте асинхронные методы сокетов, но используйте TCP. Я сомневаюсь, что вы найдете веб-сервер, который прослушивает UDP для HTTP-запросов.

Возможно, вы также захотите взглянуть на WireShark, который является инструментом регистрации сетевого трафика; Вы могли бы использовать это, чтобы увидеть, что ваша UDP-датаграмма, скорее всего, отправлена, но сервер не сгенерировал никакого ответа.

Вы также можете использовать netstat на сервере, чтобы убедиться, что он не прослушивает UDP-порт 80.

0 голосов
/ 25 февраля 2011

Когда сервер прослушивает порт TCP 80, он никогда не будет затронут кадром UDP.

TCP и UDP - разные протоколы.Оба поддерживают «номера портов», но они не связаны между собой.

Это можно проверить, прочитав ответ на UDP-сокете.Вы должны получить результат ошибки.Соответствующий код ошибки указывает на проблему, поскольку (обычно) никто не слушает порт UDP 80.

...