2011-01-12 24 views
1

「クライアント」として機能するはずの「サーバー」とAndroidアプリケーションのようなJavaデスクトップアプリケーションがあります。
"Client"はStringを送信し、 "server"から応答String []を受け取る必要があります。唯一の方法は、私が出会ってきた操作の順序(最初に読み、その後、応答を書く)を除いて、同じように構築されている。このソケットを介したAndroidからPCへのデータ交換

Socket socket = null; 
    try { 
     Log.d(log_tag, "creating socket"); 
     socket = new Socket("192.168.1.123", 8090); 
     Log.d(log_tag, "creating out"); 
     DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
     DataInputStream in = new DataInputStream(socket.getInputStream()); 
     Log.d(log_tag, "out created. sending data"); 
     out.writeUTF("sql"); 
     Log.d(log_tag, "data sent"); 
     Log.d(log_tag, "receiving data. loop"); 
     while(in.available() == 0); 
     Log.d(log_tag, "received = " + in.readUTF()); 
     out.close(); 
     in.close(); 
     socket.close(); 
     Log.d(log_tag, "all closed"); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    Log.d(log_tag, "finished"); 

「サーバ」のようにソケットを使用しています。

問題:Androidアプリケーションがフリーズライン上

while(in.available() == 0); 

ので、InputStreamが準備ができることはありませんし、私は、データが送られたことを、サーバの応答を受け取るが、「サーバー」レポートすることはできません。
あなたは私の間違いを指摘できますか(それは明らかですが、私は見ることができません)?
P.たぶんそれは間違った方法ですが、ここでは中間層を使用するオプションではありません。私はサーバーコードも変更できません。 necropostの

+0

まず、お使いのデバイス/エミュレータは192.168を見ることができることを確認してください.1.123。たとえば、エミュレータで実行していて、192.168.1.123がエミュレータをホストしている開発マシンである場合、192.168.1.123が動作しない可能性があります。代わりに10.0.2.2を使用する必要があります。http://developer.android.com/ guide/developing/tools/emulator.html#emulatornetworking – CommonsWare

+0

IPアドレスは問題ありません。開発マシンで単純なサーバーソケットアプリケーションを作成してテストします。データが正常に受信され、応答文字列が送信されました。しかし、アンドロイドアプリケーションは依然としてレスポンスを受け取っていません。 –

答えて

1

種類:)

問題は、 "サーバ" のコードにありました。

私の場合はそれがすべてで受信することができない空のUTF文字列を、送信された(何かをキャッチするためのInputStreamのための少なくとも1つのスペース文字でなければなりません)

関連する問題