1

全体的なトピックは、実際には、単純な文字列メッセージを aws サーバーに送信するチャット アプリケーションのようなものです。aws サーバーは、メッセージを使用してサーバー側で計算を行い、解決策として単純な文字列メッセージをクライアントに送信します。

サーバー:サーバー クラスを作成し、Eclipse を介して aws Beanstalk にデプロイしました。(コード サーバーを参照)

クライアント:私の Android デバイスはソケットを作成し、aws Beanstalk IP と 8080 ポートへの正常な接続を確立し、サーバーからの受信メッセージをリッスンするスレッドで無限の while ループを繰り返します。(コード Client および ClientThread を参照)

問題:私の問題は、サーバーがクライアントからの接続要求とメッセージを受信するかどうかを確認する方法がわからないことです。aws Beanstalk のコードが実際にバックグラウンドで実行され、着信接続を継続的にリッスンしていることを確認するにはどうすればよいですか? コードをデプロイしました。aws Beanstalk はサーバークラスのメインメソッドを自動的に開始し、無限に実行しますか?

サーバーコードは次のとおりです。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public static void main(String args[]) {
    ServerSocket server = null;
    System.out.println("Trying to open serversocket!");
    try {
        server = new ServerSocket(8080);
    } catch (IOException e) {
        System.out.println("Error on port: 8080 " + ", " + e);
        System.exit(1);
    }

    System.out
            .println("Server setup and waiting for client connection ...");

    Socket client = null;
    try {
        client = server.accept();
    } catch (IOException e) {
        System.out.println("Did not accept connection: " + e);
        System.exit(1);
    }

    System.out
            .println("Client connection accepted. Moving to local port ...");

    try {
        DataInputStream streamIn = new DataInputStream(
                new BufferedInputStream(client.getInputStream()));
        DataOutputStream streamOut = new DataOutputStream(
                new BufferedOutputStream(client.getOutputStream()));

        boolean done = false;
        String line;
        int i = 4;
        while (!done) {

            line = streamIn.readUTF();
            if (line.equalsIgnoreCase(".bye"))
                done = true;
            else
                System.out.println("Client says: " + line);
            if (i == 4) {
                streamOut
                        .writeUTF("Actually connected to Server with round "
                                + i);
                streamOut.flush();
                i++;
            }

        }

        streamIn.close();
        streamOut.close();
        client.close();
        server.close();
    } catch (IOException e) {
        System.out.println("IO Error in streams " + e);
    }
}
}

クライアントコードは次のとおりです。

package com.amazon.aws.singlesensor;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.util.Log;

class Client implements Runnable {
    private Socket socket = null;
private InputStream streamIn = null;
private OutputStream streamOut = null;

public InputStream getStreamIn() {
    return streamIn;
}

public Client(String serverName, int serverPort) {
    System.out.println("Establishing connection. Please wait ...");
    try {
        socket = new Socket(serverName, serverPort);
        Log.d("DEBUG", "Connected: " + socket);
        start();
    } catch (UnknownHostException uhe) {
        Log.d("DEBUG", "Host unknown: " + uhe.getMessage());
    } catch (IOException ioe) {
        Log.d("DEBUG", "Unexpected exception: " + ioe.getMessage());
    }

}

public void start() throws IOException {
    streamIn = socket.getInputStream();
    streamOut = socket.getOutputStream();

}

public void run() {

    try {
        streamOut.write(streamIn.read());
        streamOut.flush();
    } catch (IOException ioe) {
        System.out.println("Sending error: " + ioe.getMessage());
        stop();
    }

}

public void handle(String msg) {
    if (msg.equals(".bye")) {
        System.out.println("Good bye. Press RETURN to exit ...");
        stop();
    } else
        System.out.println(msg);
}

public void stop() {

    try {
        if (streamIn != null)
            streamIn.close();
        if (streamOut != null)
            streamOut.close();
        if (socket != null)
            socket.close();
    } catch (IOException ioe) {
        System.out.println("Error closing ...");
    }

}

public void send(String msg) {
    PrintWriter printwriter = new PrintWriter(streamOut);
    printwriter.write(msg);
    printwriter.flush();
}

}

これがClientThreadコードです

 package com.amazon.aws.singlesensor;

 import java.io.IOException;
 import java.io.InputStream;

 import android.os.Handler;

 public class ClientThread extends Thread {

private Client client;
private InputStream input;
private String output;
private Handler handler;
private Runnable runner;

public ClientThread() {

}

public ClientThread(Client client, Handler handler, Runnable runner) {

    this.setClient(client);
    this.input = client.getStreamIn();
    this.handler = handler;
    this.runner = runner;
    this.output = "";

}

public void run() {

    int status = 0;
    while (status != -1) {

        try {
            status = input.read();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        while (status != '~'){
            try {
                status = input.read();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            output = output + String.valueOf((char) status);

            handler.post(runner);
        }
        output = output + "\n";



    }

}

public String giveString(){
    return output;
}

public void setClient(Client client) {
    this.client = client;
}

public Client getClient() {
    return client;
}

 }

お時間をいただきありがとうございます!

4

0 に答える 0