2011-05-05 70 views
4

這裏是我的全碼:CNX的建立,我將數據發送到服務器,但我不能從服務器讀取什麼...Android客戶端套接字如何讀取數據?

public class client extends Activity 
{ 
    /** Called when the activity is first created. */ 
    Socket sock; 
    String spliter = "**"; 
    String mobileNbr = "100"; 
    String LastJOKEId = "-1"; 
    String spliterlast = "^^$$"; 
    BufferedReader inFromServer; 
    DataOutputStream outToServer; 
    TextView cnx; 
    TextView output; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     setupNetworking(); 
     // Thread readerThread=new Thread(new IncomingReader()); 
     // readerThread.start(); 
    } 

    private void setupNetworking() 
    { 
     try 
     { 
      Log.i("ClientActivity", "Connecting..."); 
      sock = new Socket("192.168.153.221", 9003); 
      cnx = (TextView) findViewById(R.id.textView1); 
      cnx.setText("Network Established."); 
      inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream())); 
      Log.i("ClientActivity", "Sending command."); 
      outToServer = new DataOutputStream(sock.getOutputStream()); 
      String sentence = "logins" + spliter + mobileNbr + spliter + LastJOKEId + spliterlast; 
      outToServer.writeBytes(sentence + '\n'); 
      Log.i("ClientActivity", "Sent."); 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      cnx = (TextView) findViewById(R.id.textView1); 
      cnx.setText("Network failed"); 
      e.printStackTrace(); 
     } 
    } 

    public class IncomingReader implements Runnable 
    { 
     String message; 
     public void run() 
     { 
      try 
      { 
       while ((message = inFromServer.readLine()) != null) 
       { 
        output = (TextView) findViewById(R.id.textView2); 
        output.setText(message); 
       } 
      } 
      catch (IOException e) 
      { 
       output = (TextView) findViewById(R.id.textView2); 
       output.setText("nth to display"); 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

你會得到什麼結果? – 2011-05-05 07:10:59

+0

我沒有得到任何東西:S什麼都沒發生... – AnthonyK 2011-05-05 07:15:54

+0

你調試這部分?如何聲明/處理你的'inFromServer'?您應該嘗試捕獲Exception而不是IOException,因爲可能非常容易出現'NullPointerException'。另外,如果你的最後一行是一個空白/空白字符串,你的'TextViwe'不會顯示任何內容。你應該嘗試使用['append'](http://developer.android.com/reference/android/widget/TextView.html#append%28java.lang.CharSequence%29)而不是'setText' – rekaszeru 2011-05-05 07:23:03

回答

1
HttpResponse response = m_httpClient.execute(request); 
String result = ""; 
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 
{ 
// open stream 
     InputStream stream = response.getEntity().getContent(); 

     if(stream != null) 
     { 
     int len = 0; 
     byte[] buf = new byte[ 1024 ]; 

     try 
     { 
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

      while((len = stream.read(buf)) > 0) 
      { 
      outputStream.write(buf, 0, len); 
      } 

      buf = outputStream.toByteArray(); 
      result = EncodingUtils.getAsciiString(buf); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      stream.close(); 
     } 
} 
15
package some; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 

public class NetClient { 

    /** 
    * Maximum size of buffer 
    */ 
    public static final int BUFFER_SIZE = 2048; 
    private Socket socket = null; 
    private PrintWriter out = null; 
    private BufferedReader in = null; 

    private String host = null; 
    private String macAddress = null; 
    private int port = 7999; 


    /** 
    * Constructor with Host, Port and MAC Address 
    * @param host 
    * @param port 
    * @param macAddress 
    */ 
    public NetClient(String host, int port, String macAddress) { 
     this.host = host; 
     this.port = port; 
     this.macAddress = macAddress; 
    } 

    private void connectWithServer() { 
     try { 
      if (socket == null) { 
       socket = new Socket(this.host, this.port); 
       out = new PrintWriter(socket.getOutputStream()); 
       in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void disConnectWithServer() { 
     if (socket != null) { 
      if (socket.isConnected()) { 
       try { 
        in.close(); 
        out.close(); 
        socket.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    public void sendDataWithString(String message) { 
     if (message != null) { 
      connectWithServer(); 
      out.write(message); 
      out.flush(); 
     } 
    } 

    public String receiveDataFromServer() { 
     try { 
      String message = ""; 
      int charsRead = 0; 
      char[] buffer = new char[BUFFER_SIZE]; 

      while ((charsRead = in.read(buffer)) != -1) { 
       message += new String(buffer).substring(0, charsRead); 
      } 

      disConnectWithServer(); // disconnect server 
      return message; 
     } catch (IOException e) { 
      return "Error receiving response: " + e.getMessage(); 
     } 
    } 


} 

// ---- -----------------------使用NetClient ------------------------- -----------------------

NetClient nc = new NetClient(host, port, mac); //mac address maybe not for you 
nc.sendDataWithString("your data"); 
String r = nc.receiveDataFromServer(); 

這是我們的android套接字客戶端正常工作與Python服務器套接字,希望它會幫助你。

+0

10倍的男人,這是一個很好的代碼 – AnthonyK 2011-05-05 08:33:44

相關問題