Открытие сокета TCP, который прослушивает порт 3000 на ESP32 из приложения Xamarin.Forms, больше не работает после обновления телефона до Android 9. На Android 8 это работало, но после обновления сокет открыть нельзя.
Приложение выдает следующее исключение:
System.InvalidOperationException: The operation is not allowed on non-connected sockets.
Я уже попробовал несколько способов решения этой проблемы:
- Попытка приложения на более старойтелефон (Android 6), который работает
- Попытка открытия сокета на ESP32 с ПК с помощью netcat, который работает
- Попытка открытия сокета наПК из приложения, которое работает
- Попытка открытия сокета на ESP32 из другого клиентского приложения TCP на смартфоне, которое работает
Все вышеперечисленное работает, но попытка открыть сокет TCP на ESP32 из приложения форм xamarin не удалась.
Я также попытался
- enabeling cleartextTrafficPermitted который не работает
- добавление разрешения "ИНТЕРНЕТ" к манифесту Android, которое не работает
Для приложения Xamarin.Forms этот код используется
var client = new TcpClient();
var result = client.BeginConnect("192.168.1.1", 3000, null, null);
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));
try
{
NetworkStream nwStream = client.GetStream();
byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(message);
nwStream.Write(bytesToSend, 0, bytesToSend.Length);
}
catch (Exception e)
{
Console.WriteLine(e);
}
client.EndConnect(result);
На стороне слушателя я использую это для прослушивания:
client_socket = accept(soc, (struct sockaddr *)&remote_addr, &socklen);
read(client_socket, recv_buf, sizeof(recv_buf));
Кажется, что Android не может открыть сокет на ESP32, вопрос в том, почему?