Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313

    serverSocket

    ciao,
    ho un problema... in una parte del mio programma devo fare un serversocket in modo da "ascoltare" le risposte che arrivano a una richiesta fatta in multicast a tutti i membri del gruppo.
    pero appunto, ogni membro mi risponde in unicast inviandomi un oggetto di tipo Message (classe definita da me)...

    come diavolo faccio a leggere il Message??? devo implementare questo metodo:

    Codice PHP:
    public static Message getReplyMessage(ServerSocket replySocket)
                
    throws Exception {
        
    //cosa devo mettere qui??? pensavo qualcosa tipo
        // Message recv = replySocket.????? non so come fare...

    qualcuno sa come posso fare? grazie spero di essere stato chiaro!
    alcool: la causa e la soluzione di tutti i problemi

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    se vuoi una connessione multicast dovresti usare un MulticastSocket
    un buon esempio sta qua

  3. #3
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    no no.. io il messaggio in multicast lo mando gia! funziona.. tutti lo ricevono... quello che voglio é che tutti rispondano in Unicast -> cioé solo a colui che ha fatto la richiesta...

    per fare questo, la richiesta contiene anche l'address del richiedente e la porta su cui rispondere.

    il mio problema é che non so usare i serverSocket. infatti prima di mandare la richiesta creo un serverSocket sulla porta 1111.

    mi manca la parte di invio della risposta in unicast e di ricezione di tale risposta sul serverSocket... ma non so come farla!
    alcool: la causa e la soluzione di tutti i problemi

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    puoi fare un gruppo con solo un client e spedire la risposta in multicast

    poi se DEVI usare i socket è semplice, apri un ServerSocket e un Socket, ti connetti e spedisci
    codice:
    int port = 12345;
    ServerSocket server = new ServerSocket(port);
    Socket sock = server.accept();
    InputStream input = sock.getInputStream();
    input.read();
    sock.shutdownInput();
    sock.close();
    
    Socket socket = new Socket("1.2.3.4", port);
    OutputStream output = socket.getOutputStream();
    output.write("message".getBytes());
    socket.shutdownOutput();
    socket.close();

  5. #5
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    allora... questo metodo l'ha fatto un mio compagno (non so se é giusto) e serve per mandare appunto la riposta:

    codice:
    public static synchronized void sendMessage(InetAddress recipientAddress,
    			int recipientPort, Message message) throws Exception {
    		/* TODO: 1. Construct and send a reply message 
    		 		 Note: you must set the message's sender address by getting
    		         the local address from the socket you create. */
    		
    	//	==============================================================================PROVA
    		DatagramSocket dsocket = new DatagramSocket();
    		
    		ByteArrayOutputStream bostream = new ByteArrayOutputStream();
    		ObjectOutputStream dostream = new ObjectOutputStream(bostream);
    		dostream.writeObject(message);
    		dostream.close();
    		bostream.close();
    		InetAddress senderAddress = dsocket.getLocalAddress();
    		message.senderAddress = senderAddress;
    		byte[] bMessage = bostream.toByteArray();
    				
    		DatagramPacket messagePacket = new DatagramPacket(bMessage, bMessage.length, recipientAddress, recipientPort);
    		dsocket.connect(recipientAddress,recipientPort);
    		//System.out.println("debug - Communication.java->sendMessage:"+recipientAddress+" <-questo è il recipient Address");
    		dsocket.send(messagePacket);
    		dsocket.close();
    	//	===============================================================================PROVA!!!!!!	
    	}
    ora io per ricevere il messaggio ho fatto questo.. ma dubito sia giusto:

    codice:
    public static Message getReplyMessage(ServerSocket replySocket)
    			throws Exception {
    		System.out.println("debug - Communication->getReplyMessage: ricevuta risposta!");
    		 //TODO 1. Wait for a reply (unicast) grant message
    		Socket rSocket = replySocket.accept(); //accetta connessione
    		InputStream rIStream = rSocket.getInputStream(); //prendi inputstream
    		ObjectInputStream rStream = new ObjectInputStream(rIStream); //trasformalo in objectInputStream
    		Message recvUMess = (Message) rStream.readObject(); //castalo in Message!
    		return recvUMess; //restituisci il messaggio
    
    	}
    ci capisci qualcosa??? help!!!
    alcool: la causa e la soluzione di tutti i problemi

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    una cosa sì, che rStream deve essere creato con rSocket.getOutputStream()

  7. #7
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    non capiscooo! ma tu come faresti a passare un oggetto Message usando i due metodi? magari esiste un modo molto piu semplice per farlo.. io mi baso su cose gia fatte e non capisco bene!
    alcool: la causa e la soluzione di tutti i problemi

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    come dicevo prima io farei come nella pagina che ho postato, usando per ricevere un gruppo con tutti gli indirizzi e per spedire un gruppo con un solo indirizzo

  9. #9
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313

    serverSocket

    cosa c'é che non va in questo???
    lo uso per ascoltare ricevere un oggetto di tipo Message (definito da me)

    premessa:
    ---------
    baseReplyPort é un int (per esempio 38500)
    getReplyMessage(serverSocket) é un metodo di communication (oggetto comm)
    ==============================================

    codice:
    ServerSocket serverSocket = null;
    
    //creo il serversocket
    try {
        serverSocket = new ServerSocket(baseReplyPort);
    }
    catch (IOException e) {
        System.err.println("Could not listen on port."+baseReplyPort);
        System.exit(1);
    }
    
    //*******************************************
    //finché non ho i grant necessari "ascolta" e prendi i messaggi (sono grant)
    while(NprocessCount>grantArrived){
           Message rMess = comm.getReplyMessage(serverSocket); //prendi la risposta
           grantArrived++;
    }
    in communication poi ho il metodo che ho usato sopra per ascoltare e prendere i messaggi:

    codice:
    public static Message getReplyMessage(ServerSocket replySocket) throws Exception {
    		
       Socket cSocket = null;
       try{
          System.out.println("Server listnening on :"+replySocket.getLocalPort());
    
          cSocket = replySocket.accept(); // accetto la connessione
          //il problema é qui sopra!!!
          System.out.println("problema problema problema") //infatti questo non é mai scritto!
          
          //ora prendo il Message
          ObjectInputStream bStream = new ObjectInputStream(cSocket.getInputStream());
    			
          Message  message = (Message) bStream.readObject();
          System.out.println("legge il messaggio");
          bStream.close();
    		
          System.out.println("ritorna il messaggio");
          cSocket.close(); //chiudo il socket
          replySocket.close(); //chiudo il serversocket!
          return message;
       }
       catch(Exception e){
          System.err.println("Accept failed.");
          return null;
       }
    }
    Mi sapete dare una mano??? non capisco perché ma si blocca al cSocket = replySocket.accept();
    alcool: la causa e la soluzione di tutti i problemi

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477

    Moderazione

    Ho unito le discussioni in quanto si tratta di problemi strettamente correlati.

    In ogni caso, usa titoli più significativi di quelli che hai adoperato oggi, con qualche dettaglio in più sul problema... non si paga a caratteri digitati.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.