Xamarin.Forms TcpClient TtlExpired - PullRequest
0 голосов
/ 04 октября 2018

Я использую

TcpClient client = new TcpClient(); 
await client.ConnectAsync(IPAddress.Text, Convert.ToInt32(Port.Text));

Тогда client.Connected равен True, но когда я пингую сервер

Ping p = new Ping(); 
PingReply reply = p.Send(IPAddress.Text, 3000);

, я получаю статус: TtlExpired

есть ли у вас идеи, что может быть не так?спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Ttl указывает, сколько раз пакеты данных Ping могут быть пересланы.Значение по умолчанию - 128, поэтому эта ошибка означает, что пакет не достиг места назначения после 128-кратной пересылки (в шлюзах / маршрутизаторах).

Используйте свойство Ttl, чтобы указать максимальное числораз эхо-сообщение ICMP может быть переадресовано до достижения пункта назначения.Если пакет не достигает своего места назначения после пересылки указанное количество раз, пакет отбрасывается и эхо-запрос ICMP не выполняется.Когда это происходит, для состояния устанавливается значение TtlExpired.

Поэтому используйте перегрузку Ping.Send, которая принимает PingOptions, и установите большее значение Ttl в PingOptions.

Ping pingSender = new Ping ();

// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes (data);

// Wait 10 seconds for a reply.
int timeout = 10000;

// Set options for transmission:
// The data can go through 255 gateways or routers
// before it is destroyed, and the data packet
// cannot be fragmented.
PingOptions options = new PingOptions (255, true);

// Send the request.
PingReply reply = pingSender.Send(IPAddress.Text, timeout, buffer, options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...