java - 当服务器和客户端位于不同的网络时,如何使用 AWS 在它们之间进行通信?
问题描述
我正在尝试从客户端程序与我的服务器建立基本连接。当我在同一个网络上运行我的客户端/服务器时,它工作正常,但是当我的客户端程序在我的 PC 上但我的服务器程序在 EC2 实例上时,我不知道从哪里开始。
我已经在 AWS 上设置了一个 EC2 linux 实例,并将服务器代码加载到它上面。客户端在我的电脑上。
要运行服务器,我正在使用:
java GreetingServer 6000
要运行客户端,我正在使用:
java GreetingClient <EC2 Public IP> 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();
}
}
}
解决方案
推荐阅读
- node.js - 缓冲区类型视频宽高nodejs
- dialogflow-cx - 对话流 CX | 如何关闭/重置对话
- python - ValueError:尝试使用我的模型预测视频时,没有足够的值来解包(预期为 3,得到 1)
- javascript - 角度声明 var x:any; 意外令牌“var”
- ios - 无法从 Windows 上的 Visual Studio 在 iOS 模拟器上运行
- r - 闪亮的应用程序不会在 RStudio 中启动
- angular - “不能绑定到 'ngFor' 或 ngIf,因为它不是 ' 的已知属性
' 导入 CommonModule 时出错。带有延迟加载的 Angular 11/12 - javascript - useRouter().push() 在下一个js中刷新页面
- c - glRotatef 如何围绕本地索引旋转?
- android - 按钮背景渐变未显示