Java Server获取GET / POST HTTP请求

时间:2017-05-18 17:04:03

标签: java http server

我想在自己的PC上启动服务器以获取GET / POST HTML请求。

这是我使用的java代码:

    import java.awt.Toolkit;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.sql.Date;
    import java.text.SimpleDateFormat;

    public class SimpleHTTPServer {

        public static void main(String args[]) throws Exception {

            final ServerSocket server = new ServerSocket(4000);
            int number_req = 0;

            System.out.println("Listening for connection on port 4000 ....");
            while (true) {

                final Socket client = server.accept(); // Accepting connection
                InputStreamReader isr = new InputStreamReader(client.getInputStream());
                BufferedReader reader = new BufferedReader(isr);
                String line = reader.readLine();
                while (!line.isEmpty()) {
                    System.out.println(line);
                    line = reader.readLine();
                }

                // print number of request, date and time 
                Toolkit.getDefaultToolkit().beep();
                SimpleDateFormat formatTime = new SimpleDateFormat ("E dd.MM.yyyy 'at' hh:mm:ss a");
                Date date = new Date(System.currentTimeMillis());
                System.out.println("Number of requests: " + number_req + " \n\tin "+ formatTime.format(date));
            }
        }
    }

我尝试将浏览器网页上的HTML请求发送到我的ip:端口,如下所示:

http://79.49.72.102:4000 

但我总是得到ERR_CONNECTION_REFUSED。 我尝试使用localhost:4000并收到了请求。 我还在我的路由器上使用了No-IP和设置端口转发,但似乎没什么用。

我要做什么?

4 个答案:

答案 0 :(得分:0)

连接被拒绝,因为服务器79.49.72.102不允许您使用HTTP在端口4000上进行连接。这是通过服务器上的防火墙实现的常见安全措施。

谁拥有79.49.72.102? 它看起来像一个公共地址,所以它不会接受像4000这样的非标准端口上的随机传入连接。

答案 1 :(得分:0)

默认情况下,ServerSocket(端口)仅绑定到localhost。试试这个:

final ServerSocket server = new ServerSocket(4000, 0, null);

答案 2 :(得分:0)

您尝试使用的IP地址似乎是您的路由器IP。如果要通过Internet连接到服务器,则必须在路由器中进行端口映射。像external_port -> local_ip:local_port一样 在您的情况下,您需要运行服务器的local_ip本地计算机ip,并且local_port在您编写时为4000。而external port可以是你想要的。 请记住,在端口映射之后,您将使用您的服务器通过Internet与您的路由器IP和您选择的外部端口。

答案 3 :(得分:0)

我解决了将我的服务器pc的本地ID地址添加到DMZ规则中的问题。 一切顺利。