「クライアント」として機能するはずの「サーバー」と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の
まず、お使いのデバイス/エミュレータは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
IPアドレスは問題ありません。開発マシンで単純なサーバーソケットアプリケーションを作成してテストします。データが正常に受信され、応答文字列が送信されました。しかし、アンドロイドアプリケーションは依然としてレスポンスを受け取っていません。 –