2011-12-16 12 views
0

PC(Javaで書かれたシンプルなサーバー)とアンドロイドエミュレータのソケット接続に問題があります。接続が確立され、サーバーからデータが送信されますが、アンドロイドでそれを読み取ろうとすると、常にNULL文字列が読み取られます。ここに私のコードの一部です:ローカルPCサーバーとアンドロイドエミュレータのソケット接続

サーバー:

serverSocket = new ServerSocket(8888); 
socket = serverSocket.accept(); 
PrintWriter output = new PrintWriter(socket.getOutputStream(), true); 
output.write("Output string"); 
socket.close(); 

クライアント:

socket = new Socket("10.0.2.2", 8888); 
input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String s = input.readLine(); 
Log.i(TAG, s); 
socket.close(); 

私は鮮明に努め-キャッチし、ログを省略しました。ログによると、接続は確立され、サーバーはデータを送信しますが、クライアントはヌル文字列のみを受け取ります。私はどんな助けにも感謝しています。

+0

「Connection refused」エラーが発生します。 –

答えて

2

これは私の作品...(このコードのみ書き込みのために、サーバとクライアントの両方のためにソケットからデータを読み取る)

サーバー:

BufferedOutputStream bos = new BufferedOutputStream(connection. 
     getOutputStream()); 

    /** Instantiate an OutputStreamWriter object with the optional character 
    * encoding. 
    */ 
    OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII"); 

    String process = "Calling the Socket Server on "+ host + " port " + port; 

    /** Write across the socket connection and flush the buffer */ 
    osw.write(process); 
    osw.flush(); 

クライアント:

/** Instantiate a BufferedInputStream object for reading 
     /** Instantiate a BufferedInputStream object for reading 
     * incoming socket streams. 
     */ 

     BufferedInputStream bis = new BufferedInputStream(connection. 
      getInputStream()); 
     /**Instantiate an InputStreamReader with the optional 
     * character encoding. 
     */ 

     InputStreamReader isr = new InputStreamReader(bis, "US-ASCII"); 

     /**Read the socket's InputStream and append to a StringBuffer */ 
     int c; 
     while ((c = isr.read()) != 13) 
     instr.append((char) c); 

     /** Close the socket connection. */ 
     connection.close(); 
     System.out.println(instr); 
    } 
    catch (IOException f) { 
     System.out.println("IOException: " + f); 
    } 
    catch (Exception g) { 
     System.out.println("Exception: " + g); 
    } 

希望すると、これが役に立ちます。

+0

私はこの問題を発見しました。output.flush()を使用するのを忘れていました。 –

0

エミュレータは、自分のローカルネットワークポートを監視します。 ローカルPCからポートをエミュレータポートに転送する必要があります。

android adbポートフォワードを読む。

+0

それは私を助けなかった。接続は確立され、クライアントによってポートが受け入れられますが、クライアントはこのソケットを介して送信されるデータを受け取ることができません。サーバーは文字列を送信しますが、クライアントはヌル文字列のみを受け取ります。 –

2

ハイテク@yuriy何が実際にあなたのコードが間違っていない、あなたのその与えるエラーがそれを使用して出力ストリームにフルラインを書いて、それは

serverSocket = new ServerSocket(8888); 
    socket = serverSocket.accept(); 
    PrintWriter output = new PrintWriter(socket.getOutputStream(), true); 
    output.println("Output string"); 
    socket.close(); 

ちょうどサーバー

にoutput.printlnでoutput.write置き換える私のために働いていません
関連する問題