java - 在 Amazon AWS 上运行实时 Java 服务器

标签 java amazon-web-services amazon-ec2 client-server

我正在与其他几个程序员一起用 Java 开发客户端-服务器应用程序。此时我不想在本地运行代码。我希望能够从任何机器连接到服务器。

我写了一个测试服务器和测试客户端,只是为了确保一切正常。但他们不是。我正在使用 Java 附带的 Amazon AWS EC2 Linux。在我通过 SSH 连接到 EC2 后,我能够编译并运行我的服务器,但我本地磁盘上的客户端只是没有连接。这是代码。

// Code found online (https://cs.lmu.edu/~ray/notes/javanetexamples/)
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;

public class TestServer {

    public static void main(String[] args) throws Exception {
        try (ServerSocket listener = new ServerSocket(50000)) {
            System.out.println("The capitalization server is running...");
            System.out.println(listener.getInetAddress());
            ExecutorService pool = Executors.newFixedThreadPool(20);
            while (true) {
                pool.execute(new Capitalizer(listener.accept()));
            }
        }
    }

    private static class Capitalizer implements Runnable {
        private Socket socket;

        Capitalizer(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
            System.out.println("Connected: " + socket);
            try {
                Scanner in = new Scanner(socket.getInputStream());
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                while (in.hasNextLine()) {
                    out.println(in.nextLine().toUpperCase());
                }
            } catch (Exception e) {
                System.out.println("Error:" + socket);
            } finally {
                try { socket.close(); } catch (IOException e) {}
                System.out.println("Closed: " + socket);
            }
        }
    }
}

// Code found online (https://cs.lmu.edu/~ray/notes/javanetexamples/)
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TestClient {
    public static void main(String[] args) throws Exception {
        try (Socket socket = new Socket("ADDRESS HERE", 50000)) {
            System.out.println("Enter lines of text then Ctrl+D or Ctrl+C to quit");
            Scanner scanner = new Scanner(System.in);
            Scanner in = new Scanner(socket.getInputStream());
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            while (scanner.hasNextLine()) {
                out.println(scanner.nextLine());
                System.out.println(in.nextLine());
            }
        }
    }
}

代替客户端中的“ADDRESS HERE”,我尝试了我的 Amazon EC2 实例的私有(private) IP 和公共(public) IP。我也尝试过公共(public) DNS 名称。似乎没有任何效果。只是没有从客户端到服务器的连接。事实上,“输入文本行然后按 Ctrl+D 或 Ctrl+C 退出”永远不会打印出来。

感谢所有帮助。谢谢。

最佳答案

允许您的 IP 地址向 EC2 发送请求。为此,您需要转到您的安全组并在那里添加您的 IP。按照这些步骤-

  1. 转到您的 AWS 控制台。
  2. 单击 EC2,然后在 Resources 下找到 Security Groups。
  3. 选择您的安全组。
  4. 按照给定图像中的步骤操作。

steps to follow

关于java - 在 Amazon AWS 上运行实时 Java 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58963775/

相关文章:

java.lang.NullPointerException 和未知来源

java - SQLite 数据库不接受超过 1000 行?

amazon-web-services - 无法通过aws cli从localstack调用lambda函数

ssl - 在 Amazon ec2 用户中安装 GoDaddy SSL

amazon-web-services - Route 53 aws www.domain.com 有效,但 domain.com 无效

java - JVM 会垃圾收集内存中的孤立周期吗?

java - Firebase 云消息传递在某些设备上不工作

amazon-web-services - 如何将域重定向到 Amazon EC2 机器?

python - 如何使用 boto3 创建 ec2 实例

Java Elasticsearch-Hadoop 配置的节点都不可用