ちょっと、このプログラムを最後の2〜3日間デバッグしようとしています。ここで問題は、私はクライアント側のサーバーアーキテクチャとすべてのクライアント(とその情報を)ソケット接続を使用して特定の時間間隔の後にサーバーをpingしています。サーバー側で私はObjectOutputStreamを構築しようとすると、ここにクライアントのコードがあります。
ObjectInputStreamコンストラクタでプログラムがスタックされている
public void pingUpdate(){
Thread pingThread = new Thread() {
public void run() {
while(true) {
try {
ping_socket = new Socket("localhost", 11111);
ObjectOutputStream ping_objectOutputStream = new ObjectOutputStream(ping_socket.getOutputStream());
ping_objectOutputStream.flush();
ping_objectOutputStream.writeObject(user);
ping_objectOutputStream.close();
ping_socket.close();
}catch (Exception exception) {
exception.printStackTrace();
}
}
};
pingThread.start();
}
そしてここで「入力ストリーム確立」とはまり込むまで、サーバーのコード
public void run() {
while (true) {
try {
System.out.println("Server Listening");
Socket client = null;
client = serverSock.accept();
System.out.println("Accepted");
InputStream inputStream = client.getInputStream();
System.out.println("Input stream established");
ObjectInputStream ois = new ObjectInputStream(inputStream);
System.out.println("Object streams established");
User user = (User) ois.readObject();
System.out.println("Object read");
ois.close();
client.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}
サーバプログラムが印刷されます。私はクライアントサイドで出力ストリームをフラッシュしましたが、なぜこれが起こるのか分かりません。ありがとうございます。
ストリームを一度作成する必要があります。 'pingThread'はすべてのループに新しい' ObjectOutputStream'を作成します。いくつかのネットワーキングチュートリアルも行ってみたいかもしれません。それ以外の場合は、数週間デバッグします。 – Kayaman
例外がスローされた場合は、ソケットを閉じていません。 – EJP
@ Kayamanループの各反復でObjectOutputStreamを作成する際の問題点は何ですか? – omjego