Files
unisa_prog_distribuita_2014…/socket_chat_tcp/ServerClientHandler.java

87 lines
1.8 KiB
Java

package socket_chat_tcp;
import java.io.*;
import java.net.Socket;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Logger;
/**
* Created with xgiovio.macbookair.
* User: xgiovio
* Date: 02/12/14
* Time: 17:36
*/
public class ServerClientHandler extends Thread {
public ServerClientHandler (Socket isclient){
sclient=isclient;
}
@Override
public void run() {
synchronized (vs) {
vs.add(sclient);
}
try {
DataInputStream i = new DataInputStream(new BufferedInputStream(sclient.getInputStream()));
name = i.readUTF();
broadcast(name + " si e' connesso");
while (true){
String m = i.readUTF();
broadcast(name + ": " + m);
}
} catch (IOException e) {
}
finally {
try {
sclient.close();
synchronized (vs){
vs.remove(sclient);
}
broadcast(name + " si e' disonnesso");
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void broadcast (String s){
Iterator<Socket> it = vs.iterator();
for (;it.hasNext();){
Socket next = it.next();
if (next != sclient) {
try {
DataOutputStream o = new DataOutputStream(new BufferedOutputStream(next.getOutputStream()));
o.writeUTF(s);
o.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private String name;
private final Socket sclient;
private static final Vector<Socket> vs = new Vector<Socket>();
}