繁体   English   中英

升级到Android 9后无法从Xamarin.Forms应用打开ESP32套接字

[英]Unable to open ESP32 socket from Xamarin.Forms app after upgrading to Android 9

将手机更新为Android 9后,无法从Xamarin.Forms应用程序打开正在ESP32上的3000端口监听的TCP套接字。在Android 8上,此方法有效,但更新套接字后无法打开。

应用程序抛出以下异常:

System.InvalidOperationException: The operation is not allowed on non-connected sockets.

我已经尝试了一些方法来解决此问题:

  • 尝试应用旧的手机上(Android的6) 工作
  • 试图在ESP32从PC使用的netcat其中工程打开插座
  • 试图从工作原理应用在PC上打开套接字
  • 尝试从工作正常的智能手机上的其他TCP客户端应用程序打开ESP32上的套接字

以上所有工作均有效,但尝试从xamarin Forms应用程序打开ESP32上的TCP套接字无效。

我也尝试过

  • 启用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上的套接字,问题是为什么?

升级到Android 9时,我也遇到了套接字连接问题。我有ionic-cordova和Xamarin表单应用程序,尝试在本地wifi(托管在树莓派)上进行基本的tcp套接字连接

这一切都在以前的android版本上运行,并且从笔记本电脑上都可以,但是我在android pie中超时了。

事实证明,由于我的Raspberry没有Internet连接,因此当尝试通过IP打开套接字时,Android 9并未使用wlan网络,而是试图使用其4G连接到Internet并失败了。 我关闭4G后,它设法连接到Rasp。

我在Xamarin中打开连接的简单代码示例:

 private TcpClient m_client;

async public void connect(string address, int port)
        {
            if(m_client.Connected)
            {
                m_client.Close();
            }

            try
            {
                await m_client.ConnectAsync(address, port);
            }catch(Exception e)
            {
                Console.WriteLine($"error while connecting: {e.Message}");
            }
            Console.WriteLine($"is connected : {m_client.Connected}");

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM