【问题标题】:Java Server to get GET/POST HTTP requestJava 服务器获取 GET/POST HTTP 请求
【发布时间】:2017-10-18 15:12:23
【问题描述】:

我想在我自己的 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));
            }
        }
    }

我尝试从浏览器网络向我的 ip:port 发送 HTML 请求,如下所示:

http://79.49.72.102:4000 

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

我该怎么办?

【问题讨论】:

标签: java http server


【解决方案1】:

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

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

【讨论】:

  • 地址 79.49.72.102 是我的网络的示例地址。
  • 首先从命令行运行ping 79.49.72.102。如果ping 有效,则表示该地址有效,并且是服务器阻止了您的请求。因此,请与服务器管理员联系,为您打开对端口的访问权限。
  • 尝试运行“telnet 79.49.72.102 4000”
  • 如果没有 IP,我可以这样做:codeping myhost254.ddns.netcode 并且该命令有效。
  • @MinhKieu codetelnet myhost254.ddns.net 50500code 不起作用。
【解决方案2】:

默认情况下,ServerSocket(port) 只会绑定到 localhost。试试这个:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 2013-10-03
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多