0

我正在尝试制作一个可以接受 GET 和 POST HTTP 请求的 Java 服务器。现在我已经设法让 GET 方法工作了。但我无法让 POST 方法正常工作。我的服务器设法读取了请求标头,但似乎没有读取消息的正文。即发布的内容。这是代码:

int port = 1991;

        ServerSocket serverSocket = new ServerSocket(port);

        System.err.println("The Server is on and listening on port " + port);
        System.out.println(" ");

        while (true) 
        {
            Socket ClientSocketConnection = serverSocket.accept();
            System.err.println("We have established a connection with a client!");
            System.out.println(" ");

            BufferedReader ServerInput = new BufferedReader(new InputStreamReader(ClientSocketConnection.getInputStream()));
            DataOutputStream ServerOutput =new DataOutputStream(ClientSocketConnection.getOutputStream());

            String StringInput;
            int iCount = 0;
            int CountNull = 0;

            while ((StringInput = ServerInput.readLine()) != null) 
            {

                System.out.println(StringInput);
            }

现在我简单地显示通过套接字发送的所有内容。但由于某种原因,我只是没有收到请求消息正文,我知道正文已发送,因为在 chrome 中我有这个:

在此处输入图像描述

我不确定如何获取“表单数据”。任何帮助将不胜感激!

更新:

这是进一步缩小的问题。From 发送 HTTP 请求很好。使用 HTTP POST 方法,我们有请求标头一个 \r\n,然后是消息数据。问题是当我的 BufferedData 变量ServerInput在 \r\n (空行)中读取时,它会停止从ServerInput. 有任何解决这个问题的方法吗?

4

3 回答 3

2

您需要阅读有关 HTTP 协议的信息。你可以看看 HttpServlet api。

servlet 的目的正是从套接字传递到 Http 协议。你确定要重新做这份工作吗?

于 2013-10-12T11:56:43.330 回答
0

我强烈建议您看看Jetty。它是一个可嵌入的 http 服务器,它将为您抽象出所有这些。

于 2013-10-12T15:45:53.627 回答
0

正如帖子中提到的,我遇到的问题是我制作的服务器读取了 HTTP 请求标头,但有些人从未设法读取通过 G​​oogle chrome 发送到服务器的帖子信息。

现在 HTTP 发布请求具有以下结构:

request header
\r\n
post information

我无法阅读帖子信息的原因是因为.readLine()功能!一旦函数读入 \r\n ,它就会假定这是消息的结尾,并停止读取正在发送的帖子信息,从而导致错误。为了解决这个问题,我不得不使用.read()函数而不是.readLine(). 该.read()函数从包含发布信息的 HTTP 请求中读取每个字符

于 2013-10-16T23:06:33.297 回答