云服务器中的java服务器套接字

时间:2012-03-06 23:07:28

标签: java sockets tcp cloud

所以我有两个用于套接字服务器和客户端的java类,如下所示:

对于服务器:

System.out.println("Server started:");
    ServerSocket server = new ServerSocket(1935, 0, InetAddress.getByName("localhost"));
    Socket connection = new Socket();
    while(active){
        connection = server.accept();
        printTimeStamp();
        InputStream in = connection.getInputStream();
        while(in.available() == 0){
            //waiting till message is complete
        }
        MessageDecode(in);
    }

MessageDecode只是一个读取输入流并将其存储在某处的内部方法

客户

Socket connectionSocket = new Socket();
        InetAddress address = InetAddress.getByName("THE_CLOUD_SERVER_IP");
        SocketAddress sAddress = new InetSocketAddress(address, 1935);
        connectionSocket.setKeepAlive(true);
        connectionSocket.setTcpNoDelay(true);
        connectionSocket.connect(sAddress, 2000);
        OutputStream os = connectionSocket.getOutputStream();
        os.write("HELLO SERVER".getBytes());
        os.close();
        System.out.println("sent");

当我在本地主机上运行它时,它就像一个魅力,但是当我将这个类运行到云服务器时,我得到了异常java.net.SocketTimeoutException: connect timed out

即使在听的时候,我也知道它在听,因为当我运行应用程序时,我会做一个netstat -anp:

tcp        0      0 127.0.0.1:1935              0.0.0.0:*                   LISTEN      PID/java

有人能给我一个如何解决这个问题的线索吗? 你的帮助必须得到赞赏。 谢谢(._。')

1 个答案:

答案 0 :(得分:0)

据我所知,云提供商不允许打开低级套接字(甚至很少允许WebSocket)。他们通常在Java应用程序服务器前使用代理。云提供程序通常用于HTTP应用程序。

如果您确实想使用套接字,请离开当前的云提供商并在Amazon EC2上开设帐户。