Android Socket клиент не подключается к серверу - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь подключить клиент Android к ПК-серверу, но клиент всегда падает и не подключается к серверу. сервер состоит из двух методов, один из которых ожидает подключения клиента, а другой - печатает подключенный клиент (я не использовал поток, я подключаю только одного клиента) Сервер (я покажу только первый метод):

public Socket listeningClient () 
{
    try 
    {
        server = new ServerSocket(8080);
        client = server.accept();
        server.close();
    }
    catch (Exception e)
    {
        System.out.println(e.getMessage());
        System.exit(1);
    }
    return client;
}

в клиенте есть кнопка, которая вызывает метод для создания сокета при нажатии:

Клиент

public class Client {
  String IP = "192.168.1.4";
  int portaServer = 8080;
  Socket miosocket = null;

  public void connetti() {
    try {
        InetAddress nomeServer = InetAddress.getByName(IP);
        miosocket = new Socket(nomeServer, portaServer);
        miosocket.close();
    }
    catch (UnknownHostException e) {
        e.printStackTrace();
        Log.e("MyApp", "UnknownHost");
    }
    catch (Exception e) {
        e.printStackTrace();
        Log.e("MyApp", "Exception");
        System.exit(1);
    }
  }
}

Приложение всегда вылетает на линии: miosocket = new Socket(nomeServer, portaServer); и бросает исключение (второй). Может кто-нибудь сказать мне, если мой код неправильный (я почти уверен, что проблема в коде) или есть проблема на сервере?

(в AndroidManifest.xml я использовал эти разрешения:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

)

1 Ответ

0 голосов
/ 03 мая 2018

За исключением того, что вы указали в своих комментариях, вы не можете выполнять блокировку ввода-вывода в главном потоке. Вам нужно создать поток (или использовать AsyncTask и выполнять работу там.

Если вы действительно пытаетесь разместить сервер в службе Android, вы должны сделать это, создав Service и используя его для размещения потока, который запускает сервер и обрабатывает запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...