1

整个主题实际上就像一个聊天应用程序向 aws 服务器发送一个简单的字符串消息,它使用该消息在服务器端进行计算并将一个简单的字符串消息作为解决方案发送回客户端。

服务器:我编写了一个服务器类,并通过 eclipse 将其部署到 aws beanstalk。(见代码服务器)

客户端:我的 android 设备创建了一个套接字,建立了与我的 aws beanstalk ip 和 8080 端口的成功连接,同时在监听来自服务器的传入消息的线程中迭代了一个无休止的 while 循环。(见代码 Client 和 ClientThread)

问题:我的问题是我不知道如何检查服务器是否收到了来自客户端的连接请求和消息。我如何确保 aws beanstalk 上的代码实际上在后台运行,持续监听传入的连接?我已经部署了代码,aws beanstalk会自动启动Server Class的main方法并无限运行吗?

这是服务器代码:

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();
}

}

这是客户端线程代码

 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