TCP-сокет отказался от соединения на Android - PullRequest
0 голосов
/ 13 ноября 2018

В простом клиент-серверном сокете TCP возникает проблема при попытке создать клиентский сокет в Android Studio. Инструкция, которая вызывает ошибку: Socket s=new Socket(hostname,port);

Порт, который я использую, это 1993, и я пробую некоторые значения для переменной hostname:

  1. hostname="127.0.0.1"
  2. hostname="localhost"
  3. hostname=""
  4. hostname=InetAddress.getByName([with-the previous 2 values])

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

    W/System.err: Couldn't get I/O for the connection to 127.0.0.1
    W/System.err: java.net.ConnectException: failed to connect to /127.0.0.1 (port 1993): connect failed: ECONNREFUSED (Connection refused)
            at libcore.io.IoBridge.connect(IoBridge.java:124)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
            at java.net.Socket.startupSocket(Socket.java:592)
            at java.net.Socket.tryAllAddresses(Socket.java:128)
            at java.net.Socket.(Socket.java:178)
            at java.net.Socket.(Socket.java:150)
    W/System.err:     at com.example.davide.beachapp.model.ClientSocket$MyThread.run(ClientSocket.java:92)
        Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
            at libcore.io.Posix.connect(Native Method)
            at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
            at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
            at libcore.io.IoBridge.connect(IoBridge.java:122)
            ... 7 more

Та же самая инструкция в Eclipse работает, я тестировал ее на сервере "nc -l 1993" в командной строке, и все работает на Eclipse.

Может быть, это какая-то проблема конфигурации с манифестом?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.davide.beachapp">
  <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" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>                
  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
      android:name=".MainActivity"
      android:label="@string/app_name"
      android:theme="@style/AppTheme.NoActionBar">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" >
      </intent-filter>
    </activity>
  </application>
</manifest>

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

В эмуляторе вы должны использовать IP вашего компьютера в локальной сети. Например, в моей сети Gateway: 192.168.0.1 и ip моего компьютера 192.168.0.2. Итак, в эмуляторе Android я должен сделать:

Socket socket = new Socket("192.168.0.2",1993);

0 голосов
/ 13 ноября 2018

Если вы используете эмулятор, попробуйте использовать 10.0.2.2 вместо 127.0.0.1.

. Для получения дополнительной информации посетите эту страницу:

Настройка сети эмулятора Android

...