将手机更新到 Android 9 后,从 Xamarin.Forms 应用程序打开正在侦听 ESP32 端口 3000 的 TCP 套接字不再起作用。在 Android 8 上这有效,但更新套接字后无法打开。
应用程序抛出以下异常:
System.InvalidOperationException: The operation is not allowed on non-connected sockets.
我已经尝试了一些方法来解决这个问题:
- 在旧手机(Android 6)上试用该应用程序,该应用程序有效
- 尝试使用有效的 netcat 从 PC 打开 ESP32 上的套接字
- 尝试从有效的应用程序打开电脑上的套接字
- 尝试从智能手机上的不同 TCP 客户端应用程序打开 ESP32 上的套接字
以上所有工作,但试图从 xamarin 表单应用程序打开 ESP32 上的 TCP 套接字却没有。
我也试过
- 启用 cleartextTrafficPermitted不起作用
- 将“INTERNET”权限添加到不起作用的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上的套接字,问题是为什么?