Я написал чат-клиент, который работал нормально, пока я не решил добавить какую-нибудь вещь, отправляющую файлы, которая должна отправлять файл с клиента на сервер. После того, как я добавил строки для отправителя файла, он больше не показывает сообщения.
Думаю, проблема в том, что в run () есть два оператора try.
public void run(){
InputStream input = null;
try{
input = socket.getInputStream();
BufferedReader inReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter outReader = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//Citeste calea fisierului
String filename = inReader.readLine();
if(filename.equals("")){
//Trimit status READY la client
outReader.write("READY\n");
outReader.flush();
}
FileOutputStream wr = new FileOutputStream(new File("C://tmp/"+filename));
byte[] buffer = new byte[socket.getReceiveBufferSize()];
int bytesReceived = 0;
while((bytesReceived = input.read(buffer)) > 0){
wr.write(buffer,0,bytesReceived);
}
}
catch(IOException e){
Logger.getLogger(ConectareClient.class.getName()).log(Level.SEVERE,null,e);
}
try{
//Inregistreaza firul curent in listaObiecte
listaObiecte.addElement(this);
System.out.println("\n Fir de executie nou");
System.out.println(this.toString());
System.out.println(listaObiecte.toString());
//Bucla
while(true){
//Se citeste mesajul din fluxul de intrare trimis de client
String mesaj = fluxIntrare.readUTF();
//Se transmite mesajul catre toti clientii conectati
transmite(mesaj);
}
}
//Tratare exceptie conexiune
catch (IOException e){
e.printStackTrace();
}
finally{
//Stergere fir curent din listaObiecte
listaObiecte.removeElement(this);
System.out.println("\n Fir de executie inchis");
System.out.println(this.toString());
System.out.println(listaObiecte.toString());
try{
//Inchidere socket
socket.close();
input.close();
}
//Tratare exceptie conexiune
catch (IOException e){
e.printStackTrace();
}
}
}
private static void transmite(String mesaj){
//Enumerare generata de lista firelor de executie
Enumeration enm = listaObiecte.elements();
//Cat timp mai sunt elemente in enumerare
while(enm.hasMoreElements()){
//Se initializeaza cu null referinta firului curent
ConectareClient firDestinatie = null;
//Se protejeaza vectorul firelor de acces simultan
synchronized(listaObiecte){
//Se memoreaza referinta catre firul curent
firDestinatie = (ConectareClient) enm.nextElement();
}
//Referinta valida
if(firDestinatie != null){
try{
//Se protejeaza fluxul de iesire de acces simultan
synchronized(firDestinatie.fluxIesire){
//Scriere mesaj in flux de iesire
firDestinatie.fluxIesire.writeUTF(mesaj);
}
//Mesajul este transmis
firDestinatie.fluxIesire.flush();
}
catch(IOException e){
firDestinatie.stop();
}
}
}
}