2012-04-26 4 views
2

У меня есть код сервера и клиента, который отлично работает как приложение Java. Сервер запускается на моем локальном компьютере и прослушивает порт 4444. Любое приложение Java может легко подключаться, но когда я переношу свой код на Android, я продолжаю получать IOException, независимо от того, что я пытаюсь. Я прочитал, что вам нужно изменить «localhost» на «10.0.2.2», но я все еще получаю исключение IOException. Я попробовал свой IP-адрес с сайта whatsmyip.org, но он по-прежнему дает мне IOException. Вот мой андроид код ...Как подключить программу Android к локальному серверу?

package test.myPackage; 

import java.io.IOException; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class TestProjectActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView tv = new TextView(this); 
     tv.setText("Hello, Android"); 
     setContentView(tv); 

    Socket s = null; 
    try { 
     s = new Socket("10.0.2.2", 4444); 
     tv.setText("socket: CONNECTED!"); 
    } catch (UnknownHostException e) { 
     tv.setText("socket: unknown host"); 
    } catch (IOException e) { 
     tv.setText("socket: IO Exception"); 
    } 
} 

}

+0

Каков ваш IP-адрес в вашей локальной сети? Вы на linux или windows? На окнах откройте окно команд и введите в него 'ipconfig'. Просто введите свой IPV4 в свой код. В linux откройте терминал и выполните 'ifconfig'. Очевидно, ваш интернет-провайдер заблокировал доступ к вашей машине извне. Ваш публичный IP-адрес не то, что вы хотите. –

ответ

2

Сначала убедитесь, что ваше приложение имеет разрешение на доступ в Интернет.

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

Для реального устройства Android вы должны либо подключить устройство к той же сети Wi-Fi, что и ПК, на котором размещен сервер, найти способ злоупотребления модемным решением, чтобы получить их в одной сети по USB-кабелю, или переместите ваш сервер на внешнюю машину, доступную из Интернета в целом, чтобы получить доступ к ней из мобильного сетевого соединения устройства.

И EvilDuck определенно имеет смысл злоупотреблять нитью пользовательского интерфейса.

+0

Проблема была в моем приложении не было разрешения на интернет. Я добавил в манифест и теперь он работает. Благодаря! – user1080952

0

Как я понимаю, вы работаете Android-клиент на устройстве в той же сети, что и сервер? Затем вы должны использовать внутренние IP-адреса своих серверов. Localhost здесь будет искать серверы на устройстве, очевидно.

whatsmyip.org предоставит вам внешний IP-адрес.

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

И для прекращения сетевой активности в потоке пользовательского интерфейса ffs !!!

Смежные вопросы