0

我的客户端在 Tomcat 服务器上运行,我无权访问客户端代码。所以我必须建立这个服务器来处理来自客户端的请求。为此,我正在端口上读取字节流,如下所示:

ServerSocket ss = new ServerSocket(8999);
Socket s = ss.accept();
InputStreamReader in = new InputStreamReader(s.getInputStream());

cbuf = new char[buf_length];
int char_read = in.read(cbuf,0,10000);

inputLine = new String(cbuf);

我应该从客户端获取 SOAP POST 请求,并且我能够处理这些请求,但是在这些客户端请求之间,我收到了一个如下所示的 GET 请求:

GET / HTTP/1.1
User-Agent: Java/1.6.0_21
Host: localhost:8999
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

所以用户代理不是客户端(它可能是 Tomcat),它接受一切。所以我的服务器代码无法处理这个。所以我尝试关闭套接字,重新打开并尝试读取,但它再次读取相同的 GET 请求。

我是否需要为此请求发送特定响应以继续我的程序,以便客户端能够向我发送下一个请求?

谢谢

4

1 回答 1

0

如果您的真正意思是问题在于您无法使用Accept标头中列出的任何类型进行响应,那么正确的 HTTP 响应代码是 406。您使用此状态代码构造一个 HTTP 响应,发送它,然后关闭。

但是,你的意思是你不能处理它?因为请求说它会接受任何东西!

至于客户端将如何响应 406,这取决于客户端。如果它想重试,它将重试,尽管它不应该响应具有相同Accept标头的 406。

你甚至不清楚是什么向你发出请求(它不是 Tomcat)——这肯定是你的大部分问题,对吧?弄清楚。然后你可以弄清楚你应该做什么。

于 2012-06-29T23:08:54.190 回答