我正在用Java的其他几个程序员开发Client-Server应用程序。目前,我不想在本地运行代码。我希望能够从任何计算机连接到服务器。

我编写了一个测试服务器和测试客户端,只是为了确保一切正常。但事实并非如此。我正在使用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实例的私有IP和公共IP。我也尝试过使用公共DNS名称。似乎没有任何作用。客户端到服务器之间没有任何连接。实际上,“打印文本行然后按Ctrl + D或Ctrl + C退出”永远不会打印。

感谢所有帮助。谢谢。

最佳答案

允许您的IP地址将请求发送到EC2。为此,您需要转到安全组并在其中添加IP。按着这些次序-


转到您的AWS控制台。
单击EC2,然后在“资源”下找到安全组。
选择您的安全组。
请按照给定图像中的步骤进行操作。


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

07-28 03:29
查看更多