У меня есть C# приложение, где я ввожу IP-адрес устройства, подключенного к моему телефону, через Wi-Fi, который раздаёт этот же телефон.
Вот
если ввести белиберду, например 192..5151.77, то try catch отрабатывают и выбрасывают обратно на начальную страницу ввода IP.
Если ввести какой-то по формату правильный адрес там, например, 192.168.30.7, которого нет в списке подключенных устройств, и потом попытаться отправить данные на него, то приложение виснет, хотя я вставил часть кода, ответственного за отправку, в try catch.
Как мне проверить, что такой адрес вообще существует, и на него можно что-то отправить?
using System;
using System.Net.Sockets;
using System.Text;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace WindyBox
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PowerPage : ContentPage
{
private string ip;
private int port;
private int value = 0;
private double LastValue = 0;
public PowerPage(string ip, int port)
{
InitializeComponent();
this.ip = ip;
this.port = port;
Cooler.Source = ImageSource.FromResource("WindyBox.Resources.Cooler.png");
}
//Отправление значения, уменьшающее мощность на 1%.
private void Minus1(object sender, EventArgs e)
{
if (!(LastValue - 3 < 0) && !(value - 1 < 0))
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = $"{value - 1}%";
LastValue -= 3;
value -= 1;
string responce = Convert.ToString(LastValue);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
else
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = "0%";
value = 0;
string responce = Convert.ToString(0);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
}
//Отправление значения, уменьшающее мощность на 10%.
private void Minus10(object sender, EventArgs e)
{
if (!(LastValue - 26 < 0) && !(value - 10 < 0))
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = $"{value - 10}%";
LastValue -= 26;
value -= 10;
string responce = Convert.ToString(LastValue);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
else
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = "0%";
value = 0;
string responce = Convert.ToString(0);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
}
//Отправление значения, увеличевающее мощность на 10%.
private void Plus10(object sender, EventArgs e)
{
if (LastValue + 26 < 255 && value + 10 < 100)
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = $"{value + 10}%"; ;
LastValue += 26;
value += 10;
string responce = Convert.ToString(LastValue);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
else
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = "100%";
LastValue = 255;
value = 100;
string responce = Convert.ToString(255);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
}
//Отправление значения, увеличевающее мощность на 1%.
private void Plus1(object sender, EventArgs e)
{
if (LastValue + 3 < 255 && value + 1 < 100)
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = $"{value + 1}%";
LastValue += 3;
value += 1;
string responce = Convert.ToString(LastValue);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
else
{
try
{
TcpClient Client = new TcpClient();
Client.Connect(ip, port);
NetworkStream stream = Client.GetStream();
ValuePower.Text = "100%";
LastValue = 255;
value = 100;
string responce = Convert.ToString(255);
byte[] data = Encoding.UTF8.GetBytes(responce);
stream.Write(data, 0, data.Length);
Client.Close();
stream.Close();
}
catch
{
Navigation.PopModalAsync();
}
}
}
//Обратно на страницу ввода IP.
private async void BackMainPage(object sender, EventArgs e)
{
await Navigation.PopModalAsync();
}
}
}