ciao avevo in mente di realizzare una simil chat.. senza un server.. ma con connessioni dirette..
ma c'è qualcosa che non mi torna..
su entrambi i client che voglio far dialogare apro un thread e rimango in ascolto tramite ServerSocket
codice:
public void run() {
try{
ServerSocket ss = new ServerSocket(9080,100, InetAddress.getLocalHost());
while(true) {
// se ricevo chiamate
Socket socket = ss.accept();
// avvio client socket
SocketThread st = new SocketThread(socket, null);
st.run();
}
}catch(Exception e){
e.printStackTrace();
}
}
quando ricevo un messaggio lo leggo e chiudo il socket (non il serverSocket)
codice:
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = in.readLine();
System.out.println(socket.getInetAddress() + "> " + message);
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
per inviare un messaggio invece apro il socket, invio il messaggio e chiudo il socket immediatamente..
codice:
public void sendMessage(){
try {
String key = list.getItem(list.getSelectionIndex());
Socket sd = new Socket((String)contatti.get(key), 9080);
PrintWriter out = new PrintWriter(sd.getOutputStream(), true);
out.println(textArea.getText());
sd.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
funziona tutto, ma dal punto di vista delle performance, del traffico etc ?
è giusto continuare ad aprire e chiudere socket ?
quello che voglio non è una vera chat, quindi mi pare inutile tenere aperto il socket..
o sbaglio ??