【问题标题】:Too many open files while data transfer over Wifi通过 Wifi 传输数据时打开的文件过多
【发布时间】:2018-04-12 13:10:29
【问题描述】:

我有 2 个应用程序:Xamarin.Android 通过 Wifi 从SeekBar 发送值的客户端应用程序和实时接收此值的WinForms 服务器。一切正常,但每次传输约 40 秒的数据后,Android 应用程序都会抛出 System.Net.Sockets.SocketException 并显示“打开的文件太多”的消息。

我的接收数据的服务器代码:

    public void StartReceiving()
    {
        IPAddress localAdd = IPAddress.Parse(SERVER_IP);
        TcpListener listener = new TcpListener(localAdd, PORT_NO);
        listener.Start();

        while (true)
        {
            Socket client = listener.AcceptSocket();
            client.NoDelay = true;
            var childSocketThread = new Thread( () =>
            {
                byte[] datareceived = new byte[1];
                int size = client.Receive(datareceived);
                for (int i = 0; i < size; i++)
                {
                    Console.WriteLine(datareceived[0].ToString());
                }
                Console.WriteLine();
                //client.Close();
            });
            childSocketThread.Start();
        }
    }

从 SeekBar 发送值的客户端代码:

    private void Seek1_ProgressChanged(object sender, SeekBar.ProgressChangedEventArgs e)
    {
        TcpClient client = new TcpClient(SERVER_IP, PORT_NO);
        NetworkStream nwStream = client.GetStream();
        byte[] bytesToSend = new byte[1];
        bytesToSend[0] = Convert.ToByte(e.Progress);
        nwStream.Write(bytesToSend, 0, bytesToSend.Length);
    }

所以我的问题是,是什么导致了这个问题,我该如何解决?

【问题讨论】:

    标签: c# winforms xamarin.android


    【解决方案1】:

    您的问题如下:您为每次调用 ProgressChanged 事件处理程序打开一个套接字。您可以在一台机器上打开limited 数量的套接字,如果您打开它们的速度足够快,您最终会得到System.Net.Sockets.SocketException

    解决此问题的方法是确保关闭 TCP 连接gracefully。这样,您将释放套接字以供进一步使用。

    我的观点是 TCP 对于这种通信来说有点矫枉过正。您可以使用 HTTP 传输数据。您的桌面应用程序将是服务器,Xamarin 应用程序将是客户端。这样你就可以从同步、连接状态等方面解放出来。

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2017-01-17
      相关资源
      最近更新 更多