[JAVA] chat, inviare messaggio mentre resto in ascolto
Inviato: martedì 26 maggio 2015, 17:43
Salve, sto creando il lato Client di una chat in java, questo è il codice:
Ora sono un pò bloccato, devo creare la chat senza interfaccia grafica, e da terminale non so come poter inviare più messaggi, rimanendo sempre in ascolto del Server. Qualcuno può consigliarmi come muovermi? Grazie
Codice: Seleziona tutto
import java.io.*;
import java.net.*;
import java.nio.*;
public class ClientJava{
public static DataOutputStream DOS = null;
public static DataInputStream DIS = null;
public static Socket client = null;
public static void main(String[] args){
System.out.println("Client START");
System.out.println("Connessione in corso...");
//creazione del MSG da inviare
Msg msg = new Msg();
msg.Tipo="L";
msg.Mittente ="";
msg.Destinatario="";
msg.Mess= "enry2108";
msg.Lunghezza= msg.Mess.length();
try{
//creazione Socket
client = new Socket("192.168.2.10",1328);
System.out.println("Connessione Effettuta con Successo!!!");
//creazione Stream
DIS= new DataInputStream(client.getInputStream());
DOS = new DataOutputStream(client.getOutputStream());
//invio messaggio
send(msg);
//Messaggio in arrivo
byte[] buf1 = new byte[1520];
ByteBuffer bb = ByteBuffer.wrap(buf1);
while(true){
if(!msg.Tipo.equals("X")){
DIS.read(buf1);
Msg_rcv msg_rcv = new Msg_rcv();
byte[] b = new byte[bb.remaining()];
bb.get(b);
msg_rcv.Tipo_rcv = new String(b ,0,1);
msg_rcv.Mittente_rcv = new String(b ,1,256);
msg_rcv.Destinatario_rcv = new String(b ,257,256);
msg_rcv.Lunghezza_rcv = new String(b ,516,1);
msg_rcv.Mess_rcv = new String(b ,517,1000);
System.out.println("[CLIENT]: msg_rcv: Tipo: " + msg_rcv.Tipo_rcv + " Mittente: " + msg_rcv.Mittente_rcv + " Destinatario: " + msg_rcv.Destinatario_rcv + " Lunghezza: " + msg_rcv.Lunghezza_rcv + " Messaggio: " + msg_rcv.Mess_rcv);
bb.flip();
bb.clear();
}else{
close();
System.out.println("Disconnessione!!!");
break;
}
}
}catch(IOException e1){
e1.printStackTrace();
System.out.println("Connessione fallita: Socket non creata");
}
}
//Invio del messaggio di Login
public static void send(Msg msg){
try{
ByteBuffer buf = ByteBuffer.allocate(1517);
buf.put(msg.Tipo.getBytes()).position(1);
buf.put(msg.Mittente.getBytes()).position(257);
buf.put(msg.Destinatario.getBytes()).position(516);
buf.put((byte) msg.Lunghezza).position(517);
buf.put(msg.Mess.getBytes()).position();
byte[] baf = buf.array();
DOS.write(baf);
System.out.println("Messaggio inviato");
System.out.println("[CLIENT]: msg_snd: Tipo: " + msg.Tipo + " Mittente: " + msg.Mittente + " Destinatario: " + msg.Destinatario + " Lunghezza: " + msg.Lunghezza + " Messaggio: " + msg.Mess);
buf.flip();
buf.clear();
}catch(IOException e1){
e1.printStackTrace();
System.out.println("Messaggio NON inviato");
}
}
//chiusura Stream e Socket
public static void close(){
try{
DIS.close();
DOS.close();
client.close();
}catch(Exception e){
}
}
}