2012-05-18 93 views
3

數據所以,我有上Androidt平板電腦上運行TCP客戶端,和我有一個C++服務器的PC上運行。TCP客戶端無法從服務器讀取

我從我的平板電腦將數據發送到PC和PC可以讀取它們就好了,但是當PC試圖發送回一個消息到平板電腦,平板電腦只得到什麼。它陷在readLine()嘗試讀取內容的電話中。

因此,這裏的Java方法發送,然後等待響應

@Override 
protected Void doInBackground(Void... arg0) 
{ 
    String msg = ""; 
    Socket socket = null; 
    DataOutputStream outToServer = null; 
    BufferedReader msgFromServer = null; 
    try 
    { 
     // Socket used for I/O with the server 
     socket = new Socket("192.168.20.100", 48501); 

     // Writing to the server 
     outToServer = new DataOutputStream(socket.getOutputStream()); 

     // Reading from the server 
     msgFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     DataInputStream iStrReader = new DataInputStream(socket.getInputStream()); 

     // Initial comm 
     outToServer.writeBytes("MainCamConnect"); 

     msg = msgFromServer.readLine(); // Get stuck here 
     Log.d("NETWORK", msg); 

     socket.close(); 

    } 
    catch(UnknownHostException e) 
    { 
     e.printStackTrace(); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return(null); 
} 

和消息我從PC發送是這樣的:「StartDelayTest \ n」

我知道服務器可以發送消息就好了,因爲我有一個簡單的C++ TCP客戶端測試,它工作得很好,但是當我在平板電腦上運行它,平板電腦不能得到任何

編輯:

操作系統:Windows 7 64位專業版

編輯2:

我已經在我的電腦上運行Wireshark的,我可以確認的數​​據包被髮送到正確的IP地址,所以這個問題確實是在接收端(Android應用程序)

+0

在PC上的操作系統? – Tudor

+0

的Windows 7 64位專業版 – nevero

+1

你可能想嘗試從插座InputStream裏讀入的原始字節,和/或閱讀這樣一種方式,不等待,直到它接收''\ n'',你提到的行爲聽起來像是一個編碼問題。 –

回答

0

我會嘗試使用公共int read(char[] cbuf, int off, int len)代替你的代碼將是這樣的:

char[] buffer = new char[256]; 
int count = read(buffer, 0, 256); 

網絡緩衝區的readline不典型的客戶機SERV經常使用呃應用。

+0

我試過了,但沒有改變結果 – nevero

+0

嘗試將緩衝區更改爲一個字符。看看是否改變了一切。 –

0

您正在閱讀行,但你是不是寫他們。 writeBytes()只是寫這些字節。行以換行符結束。 readLine()會阻塞,直到收到一個。