【问题标题】:Server listenning at port with endpoint服务器在端口上侦听端点
【发布时间】:2019-01-03 08:45:27
【问题描述】:

我已经使用 Java 中的套接字创建了一个服务器,它已准备好接收 HTTP 请求并发出 HTTP 响应。 服务器位于我 PC 的端口上,但我只想监听“端点”,我的意思是,我想安装服务器,即在 localhost:60802/json 上。 这可能吗?我的代码在这里:

            PORT = Integer.parseInt(portSelection.getText());
            th =  new Thread(new Runnable() {

                //String file;
                @Override
                public void run() {
                    try{
                        server = new ServerSocket(PORT);

                        while(open) {
                            //Accept connections
                            connection = server.accept();

                            in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

                            try {
                                String line="";

                                while ((line=in.readLine())!= null && !line.equals("")){log.append(line);}                                                              
                                in.close();
                            }catch (Exception e1) {
                            }
                        }
                    }catch (EOFException e1 ) {
                        e1.printStackTrace();
                    }catch (BindException e1) {
                        log.setText("Error. Port "+PORT+" already in use.");
                        open=false;
                    }catch (SocketException e1) {

                    }catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
            th.start();

我省略了一些部分,所以你可能检测到错误,但此时代码运行良好。

【问题讨论】:

    标签: java sockets server port


    【解决方案1】:

    我想挂载服务器,即在 localhost:60802/json 上。这可能吗?

    您可以在 localhost 端口 60802 上进行侦听。这将接受该 IP / 端口上的所有连接。除此之外,您的服务器代码还需要:

    1. 读取 HTTP 请求
    2. 解码第一行以提取请求 URL
    3. 确定 URL 的路径是否与您的“端点”URL 的路径匹配;即“/json/*”
      • 如果是,则继续
      • 如果否,则发送适当的 HTTP 错误响应;例如404 未找到

    (或者,您可以将您的服务器代码放在一个反向代理后面,该代理处理这些内容并重写请求 URL。但这可能会破坏您使用套接字执行此操作的目的......)


    但坦率地说,使用套接字编写 HTTP 服务器是个坏主意。大量工作,您最终可能会得到一个没有正确实现 HTTP 规范的服务。您最好使用现有的 Web 服务器/容器(例如 Tomcat、Jetty、Glassfish、SpringBoot 等)或 Apache HttpComponents 库。

    【讨论】:

    • 感谢您的建议!
    【解决方案2】:

    服务器绑定到特定的 TCP 端口(如果提供了接口)。 如果您只想在 /json 路径上给出响应,只需创建一个检查 URL 的条件语句。

    【讨论】:

      【解决方案3】:

      如果你使用 spring boot 来挂载你的服务器和 web 服务,这将比重新编码要容易得多。

      请看: Building a RESTful Web Service with Spring Boot Actuator

      然后您可以为每组 Web 服务开发一个应用程序,并且您可以在 application.properties 文件下为每组 Web 服务指定一个特定端口:

      server.port= 60802
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多