2

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(). または、サーバーがポートでリッスンしている限り、サーバーが応答しないことはクライアントにとって問題ではありませんか??

4

1 に答える 1

0

Android エミュレーターは、設計上、仮想ファイアウォール/ルーターの背後に配置されており、同じネットワーク上にある場合でも、お互いを認識できません。エミュレータに関する Google のドキュメントの「ネットワーク リダイレクトの使用」および「相互接続エミュレータ インスタンス」の部分では、エミュレータ インスタンスと通信する方法について説明しています。

最後の質問について。ソケットに空のコンストラクターを使用してから、指定された timeout で connect 呼び出しを使用します。

于 2013-03-08T08:33:04.617 に答える