繁体   English   中英

客户端程序响应 http 请求

[英]Client program response with http request

更新:感谢@MartinFrank 的想法,我在结果中添加了 http 标头,并且它有效。

HTTP/1.1 200 正常
内容类型:文本/html
内容长度:result.length()


我正在开发一个客户端程序来处理 Web 应用程序。 Web 服务器应用程序将向客户端发送“获取”请求。 然后客户端程序将开始侦听与秤设备连接的 COM 端口,并将结果权重作为字符串返回给 Web 服务器应用程序。

我尝试使用 ARC 客户端发送请求来测试程序

http://localhost:8083/test

系统能够打印

侦听端口 8083 上的连接....
刚刚连接到 /0:0:0:0:0:0:0:1:50346
获取/测试 HTTP/1.1
主机:本地主机:8083
结果 ??? 3 741g

但是请求一直挂在请求阶段,没有响应结果,如下图:

ARC客户端

从客户端程序获得正确响应的任何想法? 谢谢您的帮助。

  static public void main(String[] args)
{

    ServerSocket server;
    try {
        server = new ServerSocket(8083);
    System.out.println("Listening for connection on port 8083 ...."); 
        while (true) {
            Socket clientSocket = server.accept();
            System.out.println("Just connected to " + clientSocket.getRemoteSocketAddress());
            InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            String line = reader.readLine();
            while (!line.isEmpty()) {
                System.out.println(line);
                line = reader.readLine();
            }
            String result = openConnection();.//listen to COM port and return weight result.
            var pw = new PrintWriter(clientSocket.getOutputStream(), true);
            System.out.print(" result ???  "+result);
            pw.println(result);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } 

}

   public static String openConnection()
{
    if(comPort == null || !comPort.isOpen()) {
        comPort = SerialPort.getCommPorts()[0];
        comPort.setComPortParameters(2400,7,SerialPort.ONE_STOP_BIT,SerialPort.EVEN_PARITY);
        comPort.openPort();
        System.out.println("COM port open: " + comPort.getDescriptivePortName());
    }else {
        System.out.println("COM port already open: " + comPort.getDescriptivePortName());
    }
    while(fullWeight == null) {
        fullWeight = getWeight();
    }
    return fullWeight;

}

还尝试对结果进行硬编码并删除端口功能。

  static public void main(String[] args)
{
....
            //String result = openConnection();
            String result = "OK"; 
            var pw = new PrintWriter(clientSocket.getOutputStream(), true);
            pw.println(result);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我认为您需要刷新您的 PrintWriter 以有效地发送您的响应

pw.println(result);
pw.flush();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM