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 に答える