C # android телефон к tcp серверу, соединение принудительно закрыто удаленным хостом - PullRequest
0 голосов
/ 20 июня 2019

Я разрабатываю сервер, который предназначен для приема ответа, отправленного телефоном Android, а затем для обработки результата, однако я продолжаю сталкиваться с постоянной проблемой "Существующее соединение было принудительно закрыто удаленным хостом"

Странно, у меня есть приложение чата (сервер / клиент), которое работает отлично.Единственная разница между этим и этим экземпляром состоит в том, что телефон 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-адрес телефона Android, а pc021 ​​- это устройство, на котором работает сервер.

enter image description here

Любая помощьБуду признателен, так как я попробовал все другие решения, опубликованные здесь, но они, похоже, не относятся к моей проблеме, кроме сообщения об ошибке того же.

1 Ответ

1 голос
/ 24 июня 2019

Нашел потенциальное решение, по крайней мере, я не испытывал никаких сил закрытия, как раньше.Решение состояло в том, чтобы включить TLS1.2 на TCP-сервере, добавив следующую строку:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

До сих пор он работал без проблем в течение 3 дней, тогда как ранее он падал после 10-20 минут сканирования.

...