Java 当服务器和客户端位于不同的网络上时,如何使用AWS在它们之间进行通信?
我正试图通过客户端程序与服务器建立基本连接。当我在同一个网络上运行我的客户机/服务器时,它工作正常,但当我的客户机程序在我的PC上,但我的服务器程序在EC2实例上时,我不知道从哪里开始 我已经在AWS上设置了一个EC2Linux实例,并将服务器代码加载到其中。客户端在我的电脑上 要运行服务器,我将使用:Java 当服务器和客户端位于不同的网络上时,如何使用AWS在它们之间进行通信?,java,amazon-web-services,amazon-ec2,ssh,Java,Amazon Web Services,Amazon Ec2,Ssh,我正试图通过客户端程序与服务器建立基本连接。当我在同一个网络上运行我的客户机/服务器时,它工作正常,但当我的客户机程序在我的PC上,但我的服务器程序在EC2实例上时,我不知道从哪里开始 我已经在AWS上设置了一个EC2Linux实例,并将服务器代码加载到其中。客户端在我的电脑上 要运行服务器,我将使用: java问候服务器6000 要运行客户端,我将使用: java欢迎客户端6000 我是AWS和服务器-客户机通信的新手,所以如果你知道这方面的好教程,那就太好了 服务器代码: // File N
java问候服务器6000
要运行客户端,我将使用:
java欢迎客户端6000
我是AWS和服务器-客户机通信的新手,所以如果你知道这方面的好教程,那就太好了
服务器代码:
// File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread {
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
public void run() {
while(true) {
try {
System.out.println("Waiting for client on port " +
serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to " + server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
+ "\nGoodbye!");
server.close();
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String [] args) {
int port = Integer.parseInt(args[0]);
try {
Thread t = new GreetingServer(port);
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码:
// File Name GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient {
public static void main(String [] args) {
String serverName = args[0];
int port = Integer.parseInt(args[1]);
try {
System.out.println("Connecting to " + serverName + " on port " + port);
Socket client = new Socket(serverName, port);
System.out.println("Just connected to " + client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Hello from " + client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
System.out.println("Server says " + in.readUTF());
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
你犯了什么错误?您可能需要确保EC2实例的安全组允许端口6000上的传入连接。(可以在AWS UI中找到)。我得到的错误是:连接超时。我使用了默认的安全组,因此如果我没有弄错的话,它允许所有端口。我认为默认的SG只允许来自具有相同SG的服务器的传入连接。您可能需要专门为您的客户端IP打开端口(或为所有用户打开安全性较低的端口)。检查SG设置中的“源”字段。它就是这样的。添加了新端口,它正在工作!