Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin Forms PCL Socket插件未从wifi卡接收数据_C#_Sockets_Xamarin_Xamarin.forms_Portable Class Library - Fatal编程技术网

C# Xamarin Forms PCL Socket插件未从wifi卡接收数据

C# Xamarin Forms PCL Socket插件未从wifi卡接收数据,c#,sockets,xamarin,xamarin.forms,portable-class-library,C#,Sockets,Xamarin,Xamarin.forms,Portable Class Library,我需要将Xamarin forms pcl或Android设备内置wifi卡的ios与tcp客户端连接。 事实上,这种联系是建立在文字上的,但我无法读取返回给我的数据。 我通常与串行工作,我不希望它的超时,我不能通过tcp读取 谁能给我一些建议,我的意思不大。 我正在使用这个插件Xamarin forms pcl进行连接 或者如果有人有其他的解决办法,请告诉我。我想直接使用套接字,但无法在visual studio中进入library Systems.Net.Socket private asy

我需要将Xamarin forms pcl或Android设备内置wifi卡的ios与tcp客户端连接。 事实上,这种联系是建立在文字上的,但我无法读取返回给我的数据。 我通常与串行工作,我不希望它的超时,我不能通过tcp读取

谁能给我一些建议,我的意思不大。 我正在使用这个插件Xamarin forms pcl进行连接

或者如果有人有其他的解决办法,请告诉我。我想直接使用套接字,但无法在visual studio中进入library Systems.Net.Socket

private async void testTCPSocketPlugin()
    {
        int port = 5555;
        String ip = "192.168.222.1";

        TcpSocketListener listener = new TcpSocketListener();

        await listener.StartListeningAsync(5555);
        listener.ConnectionReceived += Listener_ConnectionReceived;

        try
        {
            await client.ConnectAsync(ip, port);

            //listener.ConnectionReceived += async (sender, args) =>
            //{
            //    var clientListener = args.SocketClient;

            //    var bytesRead = -1;
            //    var buf = new byte[1];

            //    while (bytesRead != 0)
            //    {
            //        bytesRead = await args.SocketClient.ReadStream.ReadAsync(buf, 0, 1);
            //        if (bytesRead > 0)
            //        {

            //        }
            //        //Debug.Write(buf[0]);
            //    }
            //};
        }
        catch (Exception ex)
        {
            throw ex;
        }

        //byte[] array1 = null;
        Byte[] dati = new Byte[8];
        dati[0] = 1;
        dati[1] = 8;
        dati[2] = 0;
        dati[3] = 0;
        dati[4] = 0;
        dati[5] = 0;
        dati[6] = 0xe0;
        dati[7] = 0x0b;

        Byte[] fromBoard = new Byte[8];

        try
        {
            await client.WriteStream.WriteAsync(dati, 0, 8);

            client.ReadStream.ReadTimeout = 5000;

            Stream str = client.ReadStream;
            int testInt = await client.ReadStream.ReadAsync(fromBoard, 0, 8);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void Listener_ConnectionReceived(object sender, Sockets.Plugin.Abstractions.TcpSocketListenerConnectEventArgs e)
    {
        String test = "break here";
    }

好的,在你的代码中有一些错误的东西,我将尝试指出它们

首先,您将客户机和服务器代码混合在一个函数中,这非常令人困惑,即使这只是一个测试,因此首先将代码分为两个函数,它将更具可读性

其次,您的客户端尝试在服务器侦听之前进行连接和写入:

    try
    {
        await client.ConnectAsync(ip, port);
    }
    catch (Exception ex)
    {
        throw ex;
    }

    //...

        await client.WriteStream.WriteAsync(dati, 0, 8);

        await listener.StartListeningAsync(5555);         
这将导致连接失败,在启动客户端之前,服务器必须正在侦听。您声明已建立连接,但我对此表示怀疑,除非您执行两次调用,如果前一个服务器仍在侦听,则第二次调用将正常工作

接下来,调用wait listener.StartListeningAsync5555;在挂接事件之前,它不是非常有害的,但是如果出于某种原因,客户端在服务器启动时尝试连接,那么该连接可能会丢失,因为它将在没有任何内容连接到事件处理程序之前被接受

之后,您尝试读取客户端流,但服务器没有发送任何内容,因此代码将在int testInt=wait client.ReadStream.ReadAsyncfromBoard,0,8处阻塞;直到它抛出读取异常,因为它将达到超时

最后,如果您喜欢纯本机解决方案,您可以在共享库上创建客户机/服务器代码,在iOS/Android项目上引用该库,在这些项目上创建DependencyService,然后在PCL库上检索服务,这样您就可以完全控制代码

更新:

似乎您根本没有使用任何服务器功能,请尝试以下操作:

async void Call()
{
    TcpSocketClient client = new TcpSocketClient();
    await client.ConnectAsync("192.168.222.1", 5555);

    byte[] Data = new byte[] { 0x01, 0x08, 0, 0, 0, 0, 0xe0, 0x0b }

    await client.WriteStream.WriteAsync(Data, 0, 8);
    byte[] finalData = new byte[8];
    int read = await client.ReadStream.ReadAsync(finalData, 0, 8);

    //Check here, read will have the number of bytes read.
}

不要添加任何try/catch,如果抛出任何异常,请更新问题。

我试图根据您的说明更改代码,但侦听器似乎不像以前那样。没有办法解决吗?似乎不是什么?似乎没有联系?似乎什么都没有收到?请输入客户端和服务器代码,并更明确地说明问题。它似乎无法读取数据,但是,写入和连接工作您没有在服务器端写入任何内容,因此客户端将永远不会读取任何内容…对于我来说,公司有一个刚刚编写的逻辑板,她立即用缓冲液回应。然后就开始写,她回答说,我读不起来了。我还说,已经有软件在桌面WPF工作。我只对Xamarin的阅读有问题。