0

私は、2 台の電話間で文字列を送信するアプリケーションを実装する作業を行っています。クライアント側は、ユーザーにサーバーの IP を要求した後、サーバーとの接続を開きます。この目的のために、EditText フィールドとボタンを使用します。接続が確立されたら、新しい EditText フィールドとボタンを表示して、ユーザーが文字列を入力し、ボタンをクリックしてそれらの文字列をサーバーに送信できるようにします。サーバーは画面にメッセージを表示します。EdiText&button ごとに異なるアクティビティを作成する必要がありますか? それは2つの活動になります。その場合、最初のアクティビティが 2 番目のアクティビティへの接続を確立するために開いたソケットをどのように渡すことができますか? たった1回の活動でこれを行うことは可能ですか?各アクティビティに 1 つのレイアウトが関連付けられていることを考えると、実装するのは難しいと思います。

ありがとう

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_client);

    serverIp = (EditText) findViewById(R.id.server_ip);
    connectPhones = (Button) findViewById(R.id.connect_phones);
    connectPhones.setOnClickListener(connectListener);


}

private OnClickListener connectListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        if (!connected) {
            serverIpAddress = serverIp.getText().toString();
            if (!serverIpAddress.equals("")) {
                Thread cThread = new Thread(new ClientThread());
                cThread.start();
            }
        }
    }
};

public class ClientThread implements Runnable {

    public void run() {
        try {
            Log.d("ClientActivity", serverIpAddress);
            InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
            Log.d("ClientActivity", "C: Connecting...");
            Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
            connected = true;
            while (connected) {
                try {
                    Log.d("ClientActivity", "C: Sending command.");
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                                .getOutputStream())), true);
                        // where you issue the commands
                        out.println("message");
                        Log.d("ClientActivity", "C: Sent.");
                } catch (Exception e) {
                    Log.e("ClientActivity", "S: Error", e);
                }
            }
            socket.close();
            Log.d("ClientActivity", "C: Closed.");
        } catch (Exception e) {
            Log.e("ClientActivity", "C: Error", e);
            connected = false;
        }
    }
}
}
4

1 に答える 1

0

あなたはソケットが双方向接続であることを知っているので、読み取りと書き込みのために2つのアクティビティを行う必要はありませんが、私が確信していないところは次のとおりです。アプリが着信メッセージを表示できるかどうかはわかりません。メインスレッドでのネットワーキング、および別のスレッドではUIに影響しない場合があります

于 2013-01-30T14:47:50.533 に答える