作成しているクライアントサーバーアプリがあり、サーバー上のオブジェクトを読み取るときに少し問題が発生します。
サーバーがクライアントソケットに接続した後、オブジェクトの入力ストリームと出力ストリームを作成し、それらをservice()メソッドに渡します。そこでは、クライアントからのさまざまな種類のメッセージを処理することになっています。クライアント(つまり、Message私のデザインのオブジェクト)からメッセージをうまく受け取ることができます。しかしもちろん、私がやりたいのは、メッセージを取得して処理し、応答できるようにループを作成することです。
これまでのところ、私のコードは1つのメッセージに対してのみ機能します。ループを追加すると、すべての反復で何が起こったのか、クライアントがソケットを介して新しいメッセージを送信する機会を得る前に、サーバーは同じメッセージを何度も読み続けました(少なくともこれが起こっていると思います) 。
したがって、私が本当に行う必要があるのは、service()メソッドに新しい入力を待機させる方法を理解することです。何か案は?それとも私はこれに間違って近づいていますか?反復ごとに新しいOISを作成する必要がありますか...?いくつかのコード:
public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {
_shouldService = true;
while (_shouldService) {
// It just keeps reading the same message over and over
// I need it to wait here until the client sends a new message
// Unless I'm just approaching this all wrong!
NetworkMessage message = (NetworkMessage) input.readObject();
NetworkMessageHeader header = message.getHeader();
String headerType = header.getType();
if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
doLoginForMessage(message, output);
} else if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeFiles)) {
doFilesList(message, output);
} else {
System.out.println("Unrecognized header type: " + headerType);
}
}
}