2013-12-06 2 views
1

Я злюсь, пытаясь прочитать данные из сокета. Я пробовал все и все, я думаю, что мой код должен работать, но нет.Чтение данных из гнезда в android

Мое намерение заключается только в следующем методе onCreate. Сначала я создаю Thread для запуска всех вещей, связанных с сетью. Затем я создаю объект scoket, и я читаю входной поток сокета. В этот момент, в бесконечном цикле, я прочитал входной поток, используя readLine, как объяснил пилу на this answer. Наконец, я делаю то, что хочу, с данными, которые поступают через сокет.

Я не знаю, сколько данных будет отправлено сервером. И это было бы в json, но это не имеет значения.

Вот мой код

public void receiveMsgs(){  
    new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      BufferedReader in = null; 
      try { 
       Log.d("NETWORK-RECEIVE", "Trying to connect to socket..."); 
       Socket socket; 
       InetAddress serverAddr = InetAddress.getByName(SERVER_IP); 
       socket = new Socket(serverAddr, SERVERPORT); 
       in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       if(socket.isConnected()){ 
        Log.d("NETWORK-RECEIVE", "The connection have been stablished"); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException"); 
      } 
      while(true){ 
       String msg = null; 
       try { 
        StringBuilder total = new StringBuilder(); 
        String line; 
        while ((line = in.readLine()) != null) { 
         total.append(line); 
        }     
        msg = total.toString(); 
        Log.d("NETWORK-RECEIVE","Message readed!:"+msg); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        Log.d("NETWORK-RECEIVE", "Something goes wrong: IOException"); 
       } 
       if(msg == null){ 
        Log.d("NETWORK-RECEIVE", "Message is null"); 
        break; 
       } 
       else{ 
        //Do what I want 
        Log.d("NETWORK-RECEIVE", "something"); 
       } 
      }   
     } 
    }).start(); 
} 
+0

Вы пробовали его на эмуляторе или устройстве ..? Если вам нужны данные с сервера, почему вы не используете httpclient? – Piyush

+0

Оба, потому что мы работаем с нашим собственным протоколом, используя потоки, и я должен отправлять сообщения через потоки. –

+0

Ну, что происходит с тем, что вы запускаете? Какие сообщения журнала вы создаете? Есть ли у вас основания полагать, что соединение даже устанавливается с сервером? –

ответ