无法在Visual Studio Xamarin中的Android App上连接Socket

时间:2019-10-07 17:18:29

标签: c# android sockets xamarin.android

我正在创建并通过插座将电话连接到设备的App,到目前为止,问题是在某些设备上,并且我在一些不同的品牌和APIS上进行了测试,插座没有连接。我已经尝试了同步连接和异步连接,在sync方法上,异常是“在非阻塞套接字上运行会阻塞”错误10035。通过异步方法,我在SocketAsyncEventArgs上获得了连接成功,但随后引发了连接如果我尝试发送任何数据,将发生超时错误。

遵循我的同步方法

private bool OpenSocket(String EnderecoIP, int Porta)
    {
        Dispositivo = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        Dispositivo.ReceiveTimeout = TimeOut;
        Dispositivo.SendTimeout = TimeOut;      
        try
        {
            Dispositivo.Blocking = false; // setting this didn't work =(
            Dispositivo.Connect(EnderecoIP, Porta);
            return Dispositivo.Connected;
        }
        catch (Exception ex)
        {                
            return Dispositivo.Connected;
        }



    }

以及异步方法:

internal void OpenSocketAsync(String EnderecoIP, int Porta)
    {
        SocketAsyncEventArgs connectArgs = new SocketAsyncEventArgs();
        Dispositivo = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        Dispositivo.ReceiveTimeout = TimeOut;
        Dispositivo.SendTimeout = TimeOut;

        connectArgs.UserToken = Dispositivo;
        connectArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(EnderecoIP), porta);

        IPEndPoint remoto = new IPEndPoint(IPAddress.Parse(EnderecoIP), porta);
        object teste = new object();
        Dispositivo.BeginConnect(remoto, new AsyncCallback(ConnectCallback1), teste);

        Dispositivo.ConnectAsync(connectArgs);

        SocketError errorCode = connectArgs.SocketError;
        if (errorCode != SocketError.Success)
        {
            throw new SocketException((Int32)errorCode);
        }
    }
    public static System.Threading.ManualResetEvent allDone = new System.Threading.ManualResetEvent(false);
    public static void ConnectCallback1(IAsyncResult ar)
    {
        allDone.Set();
        Socket s = (Socket)ar.AsyncState;
        s.EndConnect(ar);
    }

同样,在所有我测试过同步方法的三星设备上都可以正常工作(我没有测试过异步方法,因为我不需要数据交换来保持异步)。并且在API 24下的Motorola设备上也可以使用,在24(> =)之上的版本上会引发异常。在所有经过测试的华硕设备上,我无法正常工作。

欢迎任何帮助!

0 个答案:

没有答案