ETIMEOUT при попытке подключения с Android на сервер Python через LTE - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу подключить Android-клиент (kotlin) к серверу Python через LTE-соединение.

  1. Сервер работает
  2. Сервер получает хорошо от локального клиента Python (Пробовал только для проверки)
  3. Не получает от клиента Android
  4. Через некоторое время происходит сбой клиента Android, говоря - соединение не удалось: ETIMEDOUT (Тайм-аут соединения)

Я могу 'не знаю почему.Пожалуйста, помогите

Server.py

import socket

HOST = ''  # Standard loopback interface address (localhost)
PORT = 3333        # Port to listen on (non-privileged ports are > 1023)

print('server starting')
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

MainActivity.kt

package mypackage

import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import java.io.PrintWriter
import java.net.Inet4Address
import java.net.InetAddress
import java.net.Socket

class MainActivity : AppCompatActivity() {
    var connectButton:Button? = null
    var status: TextView? = null
    val ip = InetAddress.getByName("theipaddr")
    val port = 3333

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        connectButton = findViewById(R.id.connectButton)
        status = findViewById(R.id.status)

        connectButton?.setOnClickListener {
            try {
                doAsync {
                    val socket = Socket(ip, port)
                    val printWriter = PrintWriter(socket.getOutputStream())
                    printWriter.write("hellohellohellohellohhellohellohelloellohello")
                    printWriter.flush()
                    printWriter.close()
                    socket.close()
                    Log.d("TEST","donnastic")
                }.execute()
            }catch (e:Exception){
                Log.d("TEST","fucked")
                e.printStackTrace()
            }
            status?.text = "connected"
        }

    }
}

class doAsync(val handler: () -> Unit) : AsyncTask<Void, Void, Void>() {
    override fun doInBackground(vararg params: Void?): Void? {
        handler()
        return null
    }
}
...