私は多くのクライアントを持つサーバーを持っています..すべての接続がサーバーに到着します
受け入れられた場合は、スレッドに送信します。
server= serverSocketcht.accept();
new ThrdConv(server).start();
ThrdConv スレッドで、入力ストリームと出力ストリームをこの新しい接続に設定しました
this.OOS=new ObjectOutputStream(server.getOutputStream());
this.OIS=new ObjectInputStream(server.getInputStream());
次に、到着した接続 (新しいクライアントと呼びましょう) をクライアントのリストに保存します。
if(isLogged){ // if success login!
thsisUser= new Clientuser(server,OOS,OIS,Omsg.my_gender,Omsg.userID);
boolean IsAdded= EIQserver.OnlineusersList.add(this.thsisUser);
すべてが正常に機能し、クライアントはメッセージを送信したり、他のクライアントとチャットしたりできます...
問題は、クライアントが去ったときに、この例外が発生することです:
SEVERE: null
java.io.EOFException
at
java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
ここに私の休暇機能があります:
Iterator<Clientuser> iterator = EIQserver.OnlineusersList.iterator();
if(EIQserver.OnlineusersList.size()>=1)
Omsg.type= MessageType.Leave;
sendMessage(OLeavemsg); // tell the partner that I am leaving...
while (iterator.hasNext()) {
Clientuser next = iterator.next();
if (next.ID.equals(OLeavemsg.userID))
{
next.ClientPort.shutdownInput(); // ClientPort is a socket of this Client
next.ClientPort.shutdownOutput();
iterator.remove();// remove the partner
}
break;
}
// end leave////////////////////////////////////////////////
接続はリストから削除されますが、上記の例外によりサーバーが停止します...
この複雑な問題を取り除くのを手伝ってください