Java 无法连接到AWS上基于套接字的服务器
更新一:通过使用,我能够验证AWS实例上的端口8080是否处于活动状态并接受连接。Java 无法连接到AWS上基于套接字的服务器,java,sockets,amazon-web-services,Java,Sockets,Amazon Web Services,更新一:通过使用,我能够验证AWS实例上的端口8080是否处于活动状态并接受连接。 这意味着端口可能未正确绑定,如果我设法解决此问题,端口将重新更新。 此外,通过使用AWS服务器实例日志,/var/log/nginx/error.log下的条目表明连接被拒绝,尽管存在不受限制的访问协议 我有一个基于套接字的服务器,在本地主机上运行完全正常。我启动服务器,然后实例客户端调用,行为符合预期;服务器向客户端返回“Hello World”并终止连接。 但是,如果我将服务器上载到AWS并将其作为Java
这意味着端口可能未正确绑定,如果我设法解决此问题,端口将重新更新。
此外,通过使用AWS服务器实例日志,/var/log/nginx/error.log下的条目表明连接被拒绝,尽管存在不受限制的访问协议
我有一个基于套接字的服务器,在本地主机上运行完全正常。我启动服务器,然后实例客户端调用,行为符合预期;服务器向客户端返回“Hello World”并终止连接。
但是,如果我将服务器上载到AWS并将其作为Java应用程序托管,则无法建立连接并重现localhost服务的行为
HelloWorldServer:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class NetMiddlewareServer {
public static void main(String[] args) {
// TODO code application logic here
int portNumber = 8080;
while(true){
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
) {
System.out.println("Test");
String inputLine, outputLine;
// Initiate conversation with client
outputLine = "Hello World";
out.println(outputLine);
clientSocket.close();
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
}
HelloWorldClient:
import java.io.*;
import java.net.*;
public class KKPClient {
public static void main(String[] args) throws IOException {
String hostName = "localhost";
int portNumber = 8080;
try (
Socket hwSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(hwSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(hwSocket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
String fromServer;
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
}
catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
}
}
上面的代码在本地运行完全正常,但是将服务器上载到AWS并更改主机名会导致错误,我相信这就是问题所在。
服务器实例的IP地址(例如52.214.166.199)未连接,并且在尝试声明套接字hwSocket时引发IOException。由于未正确创建套接字,因此不会返回任何输入,因此不会收到Hello World消息 非常感谢您的帮助,谢谢 堆栈跟踪:
Exception in thread "main" java.net.SocketException: Socket is not connected: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at kkpclient.KKPClient.main(hwClient.java:19)
C:\Users\[me]\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
线程“main”java.net.SocketException中的异常:套接字未连接:连接
位于java.net.DualStackPlainSocketImpl.connect0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
位于kkpclient.kkpclient.main(hwClient.java:19)
C:\Users\[me]\AppData\Local\NetBeans\Cache\8.1\executor snippets\run.xml:53:Java返回:1
您是否在分配给您托管服务器的VM实例的AWS安全组中打开了端口?@MaximDobryakov安全协议当前允许任何和所有入站/出站流量。仅供参考:
IOException
的全文有助于调查问题。@MaximDobryakov我不知道这一点,由于堆栈跟踪声明套接字未连接,这是特殊的,因为IP是正确的,并且安全协议应该允许连接。堆栈跟踪放在OP中供您查看。您是否打开了分配给您托管服务器的VM实例的AWS安全组中的端口?@MaximDobryakov安全协议当前允许任何和所有入站/出站流量。仅供参考:IOException
的全文有助于调查问题。@MaximDobryakov我不知道要知道这一点,因为堆栈跟踪声明套接字未连接,这是特殊的,因为IP是正确的,安全协议应该允许连接。堆栈跟踪放置在OP anyway中,供您查看。