ホームページ  >  記事  >  Java サーバー テストの前に System.out.println(in.readLine()) ステートメントを追加すると合格するのに、それを追加しないと失敗するのはなぜですか?

Java サーバー テストの前に System.out.println(in.readLine()) ステートメントを追加すると合格するのに、それを追加しないと失敗するのはなぜですか?

王林
王林転載
2024-02-22 13:34:06739ブラウズ

php editor Yuzai の回答: Java サーバー テストに System.out.println(in.readLine()) ステートメントを追加すると、テスト結果に影響を与える可能性があります。これは、このステートメントがサーバーの入力ストリームを読み取り、サーバーが受信できるようにするためです。 。 聞く。このステートメントがないと、サーバーはリクエストを正しく受信できず、テストが失敗する可能性があります。したがって、テストの前にこのステートメントを追加するのは、サーバーがリクエストを正常に受信してテストに合格できることを確認するためです。

質問内容

マルチプレイヤーマインスイーパゲームを処理するためにJavaでサーバーを実装しようとしています。サーバーが正当なクライアント要求に正しく応答することを確認するためにサーバーをテストしようとしたときに、特定のクライアント要求をサーバーに出力した後に system.out.println(in.readline()) ステートメントを追加するだけでテスト出力に合格することがわかりました。 stream ですが、テスト自体を呼び出す前に実行します。

たとえば、クライアントが行うことができるリクエストの 1 つは、ボードの現在の状態を確認するための「表示」リクエストです。私はもともと次のような「look」のテストを書きました:

リーリー

ただし、このようにテストを実行すると失敗し、[- - - - - - -] を期待していたが [] を取得したことを示すエラー メッセージが表示されます。

ただし、次のような print ステートメントを追加すると:

リーリー

テストに合格しました。なぜそのような状況が起こるのでしょうか? print ステートメントはクライアントにサーバーからの入力を読み取るための時間を与えるだけなのでしょうか、それとも何か他のことが起こっているのでしょうか?役立つ場合は、私のコードのスニペットをさらに提供していただければ幸いです。

解決策

ブラインド推測: サーバー応答は予期しない空白行で始まりました。

system.out.println(in.readline());<code>println の部分は実際には重要ではありません。in.readline() を使用するだけで済みます。サーバーからの最初の行を「消費」するのと同じ結果が得られます。 readline() は行全体が受信されるまでブロックされるため、これはタイミングの問題ではありません。

空行を送信するものをすべて削除するか、テストを変更して問題を修正することで、サーバー上でこの問題を修正できます。

リーリー

以上がJava サーバー テストの前に System.out.println(in.readLine()) ステートメントを追加すると合格するのに、それを追加しないと失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。