服务器通过端点

时间:2018-07-26 11:08:28

标签: java sockets server port

我已经使用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();

我省略了一些部分,所以也许您检测到一个错误,但是此时代码可以正常运行。

3 个答案:

答案 0 :(得分:3)

  

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

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

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

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


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

答案 1 :(得分:0)

服务器绑定到特定的TCP端口(和接口(如果提供))。 如果只想在/ json路径给出响应,则只需执行一条条件语句来检查URL。

答案 2 :(得分:0)

如果您使用Spring Boot来安装服务器和Web服务,则比重新编码所有内容要容易得多。

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

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

server.port= 60802