【问题标题】:C# android phone to tcp server, connection forcibly closed by remote hostC# android手机到tcp服务器,连接被远程主机强行关闭
【发布时间】:2019-06-24 18:59:13
【问题描述】:

我正在开发一个服务器,该服务器旨在接受安卓手机发送的响应,然后处理结果,但是我一直遇到一个持久性问题“现有连接被远程主机强行关闭”

奇怪的是,我有一个完美运行的聊天应用程序(服务器/客户端)。该实例与此实例的唯一区别在于,Android 手机连接到无线接入点并以无线方式发送数据,而聊天应用程序是有线的。

我的代码在这里:

服务器:

    private static void StartServer()
    {
        TcpListener listener = new TcpListener(IPAddress.Parse(SERVER_IP), PORT_NO);
        listener.Start();
        while (true)
        {
            using (TcpClient client = listener.AcceptTcpClient())
            {
                using (NetworkStream stream = client.GetStream())
                {
                    byte[] buffer = new byte[client.ReceiveBufferSize];
                    int bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize);
                    string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                    Console.WriteLine($"Received: {dataReceived}");
                    Thread staThread = new Thread(() => PasteText(dataReceived));
                    staThread.SetApartmentState(ApartmentState.STA);
                    staThread.Start();
                }
            }
        }
    }

客户:

    private void SendToServer(string resultToSend)
    {
        using (TcpClient client = new TcpClient(SERVER_IP, PORT_NO))
        {
            using (NetworkStream stream = client.GetStream())
            {
                byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(resultToSend);
                stream.Write(bytesToSend, 0, bytesToSend.Length);
            }
        }
    }

关于同一主题还有其他问题,但我的情况有点不同并且更专业。上面的代码直接从我一年前创建的服务器/客户端复制而来,它也是一个 android 应用程序,它可以正常工作。这就是为什么代码不再正常工作如此令人惊讶的原因。

它似乎也偶尔有效,偶尔无效。所以通过做一个小的改变(比如在客户端连接后添加一个延迟)会让服务器工作一段时间,但最终它会停止工作。它可能一天不工作,但第二天它会完美地工作。

我有wireshark,但我不确定如何解释数据包。你可以在这里看到它们,192.168.0.52是安卓手机的ip,pc021是服务器运行的设备。

任何帮助将不胜感激,因为我已经尝试了此处发布的所有其他解决方案,但除了错误消息相同之外,它们似乎与我的问题无关。

【问题讨论】:

    标签: c# server tcpclient tcplistener


    【解决方案1】:

    找到了一个潜在的解决方案,至少我没有像以前那样经历过任何强制关闭。解决方案是通过添加以下行在 TCP 服务器上启用 TLS1.2:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    

    到目前为止,它已经运行了 3 天没有问题,而之前它会在扫描 10-20 分钟后崩溃。

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 2021-05-25
      • 2014-07-30
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多