Pagina 1 di 1

[JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 17:43
da Enry2108
Salve, sto creando il lato Client di una chat in java, questo è il codice:

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){
		
		}
	}
}
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

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 17:46
da Zoff
Metti la parte della server socket in un Thread

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 17:49
da Enry2108
Il Server, è un Server C che non posso andare a toccare per motivi di progetto.
Devo costruire in Java solo il lato client, con quelle funzioni di invio e ricezione.
Che mi derivano da un altro progetto Android nel quale ci sono problemi con il messaggio di ritorno. E quindi devo fare un prova con il Client Java. :muro:
Insomma, posso muovermi solo su questo codice Client :D

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 18:31
da Enry2108
devo per forza creare un thread per poter sia rimanere in ascolto che inviare più messaggi? è il modo più semplice?

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 18:40
da Zoff
È l'unico modo

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 19:04
da Enry2108
Quindi creo il thread "client" e lo lancio nel main, all'interno lascio la creazione della socket e il mio while(true). ok e fin qui ci sono.
Come faccio a leggere i messaggi da inserire nella funzione di invio? da riga di comando?

Re: [JAVA] chat, inviare messaggio mentre resto in ascolto

Inviato: martedì 26 maggio 2015, 19:08
da Zoff
Come leggeresti un qualsiasi messaggio inserito nella linea di comando.
Ci sono tanti modi. Scanner, BufferedReader, etc...