1

したがって、Androidアプリが特別なアクティビティ(正常に動作)でサーバーに接続するたびに、ワンタイムソケット通信を備えたAndroidアプリ(クライアント)とJavaプログラム(サーバー)があります。

私のサーバーはより大きなプログラム(サーバーが情報を取得するSwingコンポーネントを使用)に埋め込まれているため、この(縮小された)コードがここにあります:

//somewhere in my Swing-Application
Server myServer = new Server();
myServer.start();
//...

public class Server extends Thread {
@Override
public void run() {
    try {
        ServerSocket serverSocket = new ServerSocket(8090);
        try {
            while (true) {
                System.out.println("Server is waiting for connections...");
                socket = serverSocket.accept();
                startHandler(socket);
            }
        } finally {
            serverSocket.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void startHandler(final Socket socket) throws IOException {
    System.out.println("Client connected to Server");
    Thread thread = new Thread() {
           @Override
        public void run() {
            try {                       
                writer = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");

    //doing something usefull, i am sending a JSON-String, which i´ll parse in my app.

                writer.write(someStringContainingJSONString);
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                closeSocket();
            }
        }
        private void closeSocket() {
            try {
                socket.close();
            } catch (IOException e) {
            }
        }
    };
    thread.start();
}

私のAndroidアプリには次のものがあります:

public void onCreate(Bundle savedInstanceState) {
    viewJSON = new Runnable() {
        @Override
        public void run() {
            getJSON();
        }
    };
    Thread thread = new Thread(null, viewJSON, "MagentoBackground");
    thread.start();
    myProgressDialog = ProgressDialog.show(myActivity.this, "Please wait...", "Retrieving data ...", true);
}

private void getJSON() {
    try {
            socket = new Socket(serverIPAddress, SERVER_PORT);
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
            String help = reader.readLine();
            // parse this String according to JSON, is working fine!
            }
// catch and so on...

今、Swing-Applicationから「データを送信」ボタンを押すたびに、アプリがデータを受信して​​、最新のデータを利用できるようにしたいと考えています。

一方、Android アプリに変更を加えたときに、サーバーがデータ (JSON-String) を受信するようにしたいと考えています。特定のボタンを押したときに文字列も送信する必要があります。

どうやってやるの?問題は、ネットワークと組み合わせたスレッド化の問題です (そうしないと、swing アプリケーションが動作しません)。ソケットを閉じないと、プログラムを適切に続行できません (または、少なくとも、現在のコードではそう思われます)。ご協力とご意見をお寄せいただき、誠にありがとうございます。ベスト、アンドレア

4

0 に答える 0