2 つの Android エミュレーター間で単純なソケット通信を実装しようとしましたが、うまくいかないようです。
私のサーバー:
public void run() {
if (SERVERIP != null) {
try {
serverStatus.setText("My IP: " + SERVERIP);
serverSocket = new ServerSocket(6798);
serverStatus.setText("ServerSocket Created");
}
catch(Exception e) {
e.printStackTrace();
}
try {
while (true) {
serverStatus.setText("waiting for client");
Socket client = serverSocket.accept();
serverStatus.setText("Connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String line = in.readLine();
serverStatus.setText(line);
in.close();
client.close();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
else
serverStatus.setText("Couldn't detect internet connection.");
}
私の顧客:
try {
InetAddress ina = InetAddress.getByName("10.0.2.2");
socket = new Socket(ina, 6789);
}
catch (Exception e) {
e.printStackTrace();
}
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println("Hey Server!");
dispText.setText("sent");
}
catch (Exception e) {
e.printStackTrace();
}
クライアント側は「送信済み」というメッセージを表示し続けますが、サーバーは「クライアントを待機中」を超えて移動しません (ブロッキングでスタックaccept()
)。Windows マシンで telnet を使用して、サーバー エミュレーターのコンソールでポート 6789 を 6798 にリダイレクトしました。また、ファイアウォールと、ここで尋ねられた同様の質問に投稿された他の提案をオフにしてみました。理解できないようで、非常に愚かな間違いを犯しているように感じるので、助けてください。
また、サーバーがまだaccept()
. または、サーバーがポートでリッスンしている限り、サーバーが応答しないことはクライアントにとって問題ではありませんか??