Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: inviare messaggi UDP

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    inviare messaggi UDP

    Ciao a tutti! sto cercando di creare una piccola applet molto semplice (immagino, anche se io non riesco ) per inviare messaggi UDP ad un certo ip e ad una certa porta e riuscire anche a leggerli... ho scritto questo e messo dei printLn per debuggare e sembra che invia il messaggio ma non riesce a riceverlo.. cosa sbaglio?

    codice:
    import java.io.*;
    import java.net.*;
    import java.applet.*;
    public class UDPClient extends Applet
    {
        protected DatagramSocket socket = null;
        protected DatagramPacket packet = null; 
        String ipAddress = "127.0.0.1";
        public void init()
        {
            try{
            socket = new DatagramSocket();
            sendPacket();
            receivePacket();
            }catch(Exception e){e.printStackTrace();}
        }
        public void sendPacket() throws IOException
        {
            byte[] buf ="prova".getBytes();
            InetAddress address = InetAddress.getByName(ipAddress);
            packet = new DatagramPacket(buf, buf.length, address, 5556);
            System.out.println("sending packet");   
    	socket.send(packet);
    
        } 
        public void receivePacket() throws IOException
        {
            byte[] buf = new byte[256];
            packet = new DatagramPacket(buf, buf.length);
            System.out.println("getting packet--- calling socket.receive");
            socket.receive(packet);
            System.out.println("got here, receiving packet");
        }
    }

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    mmmmmmmmmmmmm ti serve un po' di studio

    http://franziale.blogspot.it/2009/01...tcp-e-udp.html

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ok, grazie sono arrivato a scrivere questo:
    codice:
    import java.io.*;
    import java.net.*;
    import java.applet.*;
    public class UDPClient extends Applet{
    	public static final String HOSTNAME = "localhost";
    	public static final int PORT = 6769;
     
    	public static void main(String[] args) {
    		String host ="";
    		int port = PORT;
    		
    		/**************************************RICEZIONE**************************************/
    		
    		try {
    			// creo il socket
    			DatagramSocket serverSocket = new DatagramSocket(PORT);
    		   
    			byte[] sendData = new byte[1024];
    			byte[] receiveData = new byte[1024];
    		   
    			while (true){
    				// istanzio il datagramma in input
    				DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
    				
    				// ricevo il datagramma dal socket
    				serverSocket.receive(receivePacket);
    				
    				// recupero la frase
    				String frase = new String(receivePacket.getData());
    				
    				// indirizzo ip
    				InetAddress iPAddress = receivePacket.getAddress();
    				
    				// porta
    				//int port = receivePacket.getPort();
    				
    				// modifico la porta
    				String fraseModificata = frase.toUpperCase();
    				
    				// trasformo in byte 
    				sendData = fraseModificata.getBytes();
    				
    				// creo un datagramma per inviare al client
    				DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,iPAddress,port);
    
    				//scrivo il datagramma sul socket
    				serverSocket.send(sendPacket); 
    			} 
    		}catch(SocketException e){
    			System.out.println("Problemi nell'apertura del socket "+e.getMessage());
    		}catch(IOException e){
    			System.out.println("Problemi di I/O : "+e.getMessage());
    		}
    		
    		/**************************************INVIO**************************************/
    	  
    		if (args.length==0){
    			System.out.println("Parametri di default.");
    			System.out.println("Host : "+HOSTNAME);
    			host = HOSTNAME;
    		}else{
    			if (args.length==1){
    				host = args[0];
    			}
    			if (args.length==2){
    				host = args[0];
    				port = new Integer(args[1]).intValue();
    			}
    		}
    	  
    		// buffer di input del client
    		BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    		
    		try{
    			// creo il socket client
    			DatagramSocket clientSocket = new DatagramSocket();
    	  
    			// creo l'indirizzo ip
    			InetAddress IPAddress = InetAddress.getByName(host);
    	   
    			byte[] sendData = new byte[1024];
    			byte[] receiveData = new byte[1024];
    	   
    			String frase = inFromUser.readLine();
    	   
    			sendData = frase.getBytes();
    	   
    			// creo un datagramma con i dati da inviare, lunghezza, ip e porta
    			DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port);
    			
    			// invio il datagramma al server
    			clientSocket.send(sendPacket);
    	   
    			// credo un pacchetto 
    			DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
    	   
    			clientSocket.receive(receivePacket);
    	   
    			// frase ricevuta dal server
    			String fraseModificata = new String(receivePacket.getData());
    	   
    			System.out.println("Frase ricevuta : "+fraseModificata);
    	   
    			// chiudo il socket
    			clientSocket.close();
    		}catch(SocketException e){
    			System.out.println("Problemi con il socket : "+e.getMessage());
    		}catch(UnknownHostException e){
    			System.out.println("Host sconosciuto : "+e.getMessage());
    		}catch (IOException e){
    			System.out.println("I/O exception : "+e.getMessage());
    		}
    	}
    }
    ma non va, mi dice:
    Problemi nell'apertura del socket Address already in use: Cannot bind

    ho unito la ricezione e l'invio nella stessa classe perchè mi serve che l'applet invii e riceva i messaggi. ho anche commentato:
    int port = receivePacket.getPort();
    perchè unendo i codici non serve che la ricezione setti la porta siccome è già stata definita all'inizio.

    Provo anche ad ottimizzare un pò il codice perxhè c'è un pò di ridondanza

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    Ignorate il messaggio di prima... ho capiato e incollato il codice del client in una classe e del server in un'altra classe, senza unirli tutti in una..
    nel terminale leggo:
    codice:
    Parametri di default.
    Host : localhost
    Cos'è che non va?

  5. #5
    Ma secondo te se io leggo :

    Parametri di default.
    Host : localhost

    ma secondo te cosa ci devo capire?
    Non credo abbiamo la palla di cristallo...
    Se c'è qualche errore qualche staketrace o altro magiri si può indagare...ma senza codice sorgenti, senza staketrace con un messaggio sibillino secondo te speri che alcuno abbia il dono della chiaroveggenza..?!?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    va bene quello che hai fatto
    sotto li scrivi qualcosa tipo "ciao" e clicca invio

    il risultato deve essere questo

    codice:
    Parametri di default.
    Host : localhost
    ciao
    Frase ricevuta : CIAO

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    Originariamente inviato da schumy2000
    Ma secondo te se io leggo :

    Parametri di default.
    Host : localhost

    ma secondo te cosa ci devo capire?
    Non credo abbiamo la palla di cristallo...
    Se c'è qualche errore qualche staketrace o altro magiri si può indagare...ma senza codice sorgenti, senza staketrace con un messaggio sibillino secondo te speri che alcuno abbia il dono della chiaroveggenza..?!?
    non ti arrabbiare, ma nei messaggi precedenti bstefano79 mi ha passato un link, ovviamente da li in poi si faceva riferimento ai codici di quelle pagine.

    Originariamente inviato da bstefano79
    va bene quello che hai fatto
    sotto li scrivi qualcosa tipo "ciao" e clicca invio

    il risultato deve essere questo

    codice:
    Parametri di default.
    Host : localhost
    ciao
    Frase ricevuta : CIAO
    Aaaaaa che stupido che son stato... ho copiato e incollato senza nemmeno leggere che stava aspettando me...
    grazie mille dell'aiuto

  8. #8
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    fi nulla figuarti

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ultimissima cosa:
    vorrei includerlo in un html e hoi scritto:
    codice:
    <Applet Code="UDPClient.class" width=200 Height=100>
    </Applet>
    <Applet Code="UDPServer.class" width=200 Height=100>
    </Applet>
    le due classi sono state trasformate così rispetto al codice del link:
    codice:
    import java.io.*;
    import java.net.*;
    import java.applet.*;
    
    public class UDPServer extends Applet{
         /*.......resto del codice.......*/
    ovvero aggiungendo i 3 import e extends Applet

    nel browser però leggo:
    incompatible magic value 1768779887 in class file UDPClient
    incompatible magic value 1768779887 in class file UDPServer

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @iacoposk8: quello che schumy2000 sta cercando di dirti è che stai ammazzando le eccezioni e questo non va mai fatto, altrimenti, quando verranno sollevate delle eccezioni, non riuscirai mai a capire COSA è andato storto e PERCHE'.

    Quando catturi un'eccezione, stampane sempre lo stackTrace:

    codice:
    try {
       ...
    } catch (Exception e) {
       e.printStackTrace();
       ...
    }
    Questo ti dà informazioni sul:

    1) Cosa è accaduto
    2) Perchè è accaduto
    3) A quale riga di codice è accaduto


    Ciao. :ciauz
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.