2012-01-02 5 views
7

Я написал приложение, чтобы удаленно запускать мой сервер на своем месте. Приложение работает без проблем в эмуляторе, а также на моем смартфоне (HTC желание, Android 2.2), когда WiFi включен. Однако он не работает, когда WiFi отключен.Программирование сокетов для Android без подключения WIFi

Перед повторным запуском сначала проверьте, запущен ли он. Для этого я использую сокеты, и я сначала подключаюсь к адресу dyndns. После этого я пытаюсь подключиться к своему ip-box, где я могу включить свой компьютер, отправив команды через сокет.

При сбое подключения к этому сокету я знаю, что сервер не работает.

Соответствующий код:

 socket = new Socket(); 
     socket.connect(new InetSocketAddress(serverName, port), 10000); 
      status = socket.isConnected() == true; 
     socket.close(); 

Если есть исключения (SocketException) Я знаю, что сервер не работает. Этот подход работает отлично, когда я включил WiFi. Однако, если Wi-Fi не включен, соединение всегда говорит, что все в порядке, даже если оно не может установить соединение, поскольку сервер недоступен.

Есть ли способ проверить, действительно ли соединение установлено, даже если WiFi отключен?

Любые предложения приветствуются!

Спасибо,

Rudi

+0

Откуда вы знаете, что соединение действительно не удалось? Даже если WiFi отключен, соединение может все еще происходить через сотовую сеть передачи данных. См. Это, чтобы убедиться, что сотовая сеть передачи данных отключена: http://newbiehelper.blogspot.com/2011/07/disabling-mobile-data-network-in.html – Theo

+0

Поскольку сервер, который я пытаюсь загрузить, не работает невозможно установить соединение. Когда я запускаю программу, когда Wi-Fi включен, вызов socket.connect() завершается с ошибкой как исключение. Я должен добавить, что я нашел очень похожий вопрос о stackoverflow, к сожалению, без ответа. В основном другой вопрос относится к проблемам в 3G-режиме, поэтому, очевидно, я не одинок, чтобы справиться с этой проблемой. –

+0

Итак, он работает с Wi-Fi, он не работает с Wi-Fi, и это происходит как на эмуляторе, так и на реальном телефоне? – Theo

ответ

2

Попробуйте открыть сокет так:

public boolean connect(String ip, int port) { 
    try { 
     this.clientSocket = new Socket(ip, port); 
     clientSocket.setSoTimeout(timeout); 
     this.outToServer = new DataOutputStream(clientSocket 
       .getOutputStream()); 
     this.inFromServer = clientSocket.getInputStream(); 
     isconnected = true; 
    } catch (IOException e) { 
     Log.e("TCPclient", "connection failed on " + ip + ":" + port); 
     isconnected = false; 
     return isconnected; 
    } 
    Log.e("TCPclient", "connection to " + ip + " sucessfull"); 
    return isconnected; 
} 

Если соединение не удается, она будет генерировать IOException (работа, когда Wi-Fi не включен, а сервер, и когда Wi-Fi не включен (желание HTC 2.3)).
Этот код не совсем правильно, это просто короткая версия

EDIT Попробуйте проверить состояние ВДИ, как это (это не практично, но он должен работать)

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     if (ni.isConnected()) { 
     Toast.makeText(this,"Wifi enabled", Toast.LENGTH_LONG).show(); 
     Log.d("WiFiStateTestActivity", "WiFi!"); 
     } else { 
     Toast.makeText(this,"Wifi not enabled", Toast.LENGTH_LONG).show(); 
     Log.d("WiFiStateTestActivity", "not WiFi!"); 
     } 
    } 
+1

Просто попробовал свой код - никаких изменений для меня. С включенным Wifi я получаю исключение, когда Wi-Fi отключен, сокет делает вид, что все в порядке, и я не получаю исключения, даже если сервер не работает. Какое состояние генерирует исключение в вашем коде? Я предполагаю, что это вызов конструктора, верно? –

+0

Исключение: this.clientSocket = новый Socket (ip, порт); W/System.err (2837): java.net.ConnectException: /192.168.0.1:6789 - Сеть недоступна Мои приложения - такие приложения, как ваши, но у меня нет проблем, мои приложения работают на моем HTC désir без проблем и на планшете Android 2.1 – Duffydake

+0

Для меня один и тот же код кода не работает, когда включен Wi-Fi, так что я и ожидал. Но я не понимаю, почему вы получаете исключение с отключенным Wi-Fi, и у меня его нет - может быть версия для Android, но, как я уже сказал, есть еще один вопрос относительно той же проблемы с двумя разными смартфонами и двумя разными андроидами версии, поэтому, возможно, это нечто другое. Вздох - я понятия не имею, почему это не работает. –

1

Не забудьте для установки разрешения в manifest.xml, чтобы приложение открыло сокет.

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