streamCorruptedException
サーバーからオブジェクトを取得しようとすると、クライアントで が取得されます。
最初はクライアントがサーバーに接続するとうまくいきますが、2 番目のクライアントに接続しようとすると、または 2 回目に実行するとエラーが発生します。サーバー側でストリームをリセットしようとしましたが、うまくいきませんでした。 編集済み:
以下は私のサーバーコードです:
Socket clientSocket=null;
BufferedReader rdr=null;
ObjectOutputStream objwriter=null;
String name="";
audioReceiver = new TAudioReceiver(ser);
videoReceiver = new TVideoReceiver(ser);
fileReceiver = new TFileReceiver(ser);
//audioReceiver.start();
//videoReceiver.start();
//fileReceiver.start();
InputStream cliIn=null;
OutputStream cliOut = null;
ClientDetails client=null;
while(true)
{
objwriter=null;
clientSocket = ser.MainSocket().accept();
cliIn = clientSocket.getInputStream();
cliOut = clientSocket.getOutputStream();
client = new ClientDetails(clientSocket);
rdr= new BufferedReader( new InputStreamReader(cliIn));
name = rdr.readLine();
System.out.println("Client connected '"+ name +"'");
boolean a = ser.clientsMainSockets.AddClient(name, client);
if(a){
ser.clientsNames = ser.clientsMainSockets.ClientNames();
wr = new BufferedWriter(new OutputStreamWriter(cliOut));
wr.write("OKM");
wr.write('\n');
wr.flush();
objwriter = new ObjectOutputStream(cliOut);
//Thread.sleep(1000);
objwriter.writeObject(ser.clientsNames);
objwriter.flush();
clientSocket =null;
cliIn = null;
cliOut = null;
client = ser.clientsMainSockets.Value(name);
TMessageHandler msghdl = new TMessageHandler(ser, client.InputStream() , client.OutputStream(), name);
clientHandler.add(msghdl);
msghdl.start();
System.out.println("Starting process for client");
objwriter.reset();
Thread.sleep(5000);
}
else{
wr = new BufferedWriter(new OutputStreamWriter(cliOut));
wr.write("ERROR");
wr.write('\n');
wr.flush();
}
}
}
catch(Exception ex)
{
}
以下はクライアントコードです:
mainSock = new Socket(serverIp,serMainPort);
serOut = mainSock.getOutputStream();
serIn = mainSock.getInputStream();
buffWr= new BufferedWriter(new OutputStreamWriter(serOut));
//serOut = mainSock.getOutputStream();
//serIn = mainSock.getInputStream();
buffWr.write(myName);
buffWr.write('\n');
buffWr.flush();
buffRdr = new BufferedReader(new InputStreamReader(serIn));
String per="";
per = buffRdr.readLine();
System.out.println(per);
if(per.equals("OKM"))
{
objin = new ObjectInputStream(serIn);
ClientsName = (String[])objin.readObject();
System.out.println("Client no.'"+ ClientsName.length );
msgHandler = new TMainHandler(this, serOut, serIn);
msgHandler.start();
}
else {
throw new Exception("User Already exisits. Choose Another name.");
}
}
catch(Exception ex)
{
throw new Exception(ex.getMessage());
}