2012-06-19 3 views
-2

Привет, у меня есть сервер ServerSocket, который должен прослушивать порт 53000 и записывать любые полученные данные. Однако, похоже, я не могу пройти через блокирующий вызов server.accept().ServerSocket Android

public void run() { 

     SocketServer server = new ServerSocket(53000); 


     //---buffer store for the stream--- 
     byte[] buffer = new byte[1024]; 
     //---bytes returned from read()--- 
     int bytes; 

     //---keep listening to the InputStream until an 
     // exception occurs--- 
     while (true) { 
      try { 

       socket = server.accept(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

       String str = in.readLine(); 

       Log.i("received response from server", str); 

       in.close(); 
       socket.close(); 

      } catch (IOException e) { 
       Log.e(TAG, e.getMessage()); 
      } catch (Exception e){ 
       server.close(); 
       Log.e(TAG, e.getMessage()); 
      } 
     } 

    } 

Я также предоставил приложение разрешение INTERNET в файле манифеста. ()

Чтобы добавить к тайне, я также проверил ответы клиентов, которые отправляются в этот порт.

Есть ли что-то особенное, что мне нужно сделать, чтобы сделать эту работу?

Спасибо.

ответ

4

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

package com.test.stackoverflow 

import java.io.BufferedReader; 

public class ServerSocketTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    private static String TAG = "ServerSocketTest"; 

    private ServerSocket server; 

    Runnable conn = new Runnable() { 
     public void run() { 
      try { 
       server = new ServerSocket(53000); 

       while (true) { 
        Socket socket = server.accept(); 
        BufferedReader in = new BufferedReader(
          new InputStreamReader(socket.getInputStream())); 

        String str = in.readLine(); 

        Log.i("received response from server", str); 

        in.close(); 
        socket.close(); 
       } 
      } catch (IOException e) { 
       Log.e(TAG, e.getMessage()); 
      } catch (Exception e) {    
       Log.e(TAG, e.getMessage()); 
      } 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     new Thread(conn).start(); 
    } 

    @Override 
    protected void onPause() {  
     super.onPause(); 
     if (server != null) { 
      try { 
       server.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Используя этот код и Netcat работает через adb shell я смог подключить и общаться с приложением.

+0

Спасибо Родриго. Вы были правы, это действительно работает. Я должен был исправить это на стороне сервера. Спасибо за ваш вклад, и в следующий раз я напишу очиститель. – DoubleDunk

0

При работе с клиентом Объявите эти методы Чтобы получить доступ к Streams

// gets the input stream // ObjectInputStream input; 
// gets the output stream // ObjectOutputStream output; 
// ServerSocket server; 
// Socket connection; 

может быть, у вас есть еще один класс для доступа к сокету;

server = new ServerSocket(5001, 100); 

// Шаг 1 создать сокет-соединение Сервер = новый ServerSocket (5001, 100); в то время как (условие истинно)
// Шаг 2 ожидания для подключения

// Шаг 3 GET потоков

// Шаг 4: Процесс соединения

// Шаг 5: тесная связь

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