Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法连接到AWS上基于套接字的服务器_Java_Sockets_Amazon Web Services - Fatal编程技术网

Java 无法连接到AWS上基于套接字的服务器

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实例上的端口8080是否处于活动状态并接受连接。
这意味着端口可能未正确绑定,如果我设法解决此问题,端口将重新更新。
此外,通过使用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中,供您查看。