Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    java.net.SocketException: error setting options

    Ciao.

    Alcune volte su eclipse viene lanciata una strana eccezione del tipo java.net.SocketException: error setting options.

    Il bello è che su un programma che prima funzionava , adesso mi lancia questa eccezione senza aver fatto alcuna modifica.

    Qualcuno mi sa dire perchè?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Alcune volte su eclipse viene lanciata una strana eccezione del tipo java.net.SocketException: error setting options.
    Le opzioni sono quelle che si possono impostare su un Socket con i vari setter, es. setSoLinger, setSoTimeout, setSendBufferSize ecc...
    Ma senza avere chiaro il contesto .... è quasi impossibile dare una risposta utile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma senza avere chiaro il contesto .... è quasi impossibile dare una risposta utile.
    Il contesto è lo stesso del post di ieri;

    un Client che invia una richiesta ad un Host che poi la reinvia al Client.

    Prima funzionava...ora no
    Ecco il codice :

    Client :

    codice:
    import java.util.*;
    import java.io.*;
    import java.net.*;
    
    
    import java.security.*;
    import java.security.spec.*;
    import javax.crypto.*;
    
    
    public class Client {
    	
    	InetAddress groupAddress;
    	InetAddress serverAddress;
    	int serverPort; // SARA' LA 3100
    	int multicastPort;  //SARA' LA 5400
    	
    	Cipher cipher, decipher;	
    	MulticastSocket gkSocket; 
    	Socket socket; //SOCKET PER INVIARE LA RICHIESTA CIFRATA
    	
    	
    	public Client(InetAddress groupAddress , int multicastPort , int serverPort){
    		
    		this.groupAddress = groupAddress;
    		this.multicastPort = multicastPort;
    		this.serverPort = serverPort;
    				
    		try{
    		
    		gkSocket = new MulticastSocket(multicastPort); // MULTICASTSOCKET COLLEGATO ALLA PORTA 5400
    		
    		}catch(IOException ioe){
    			ioe.printStackTrace();;
    		}
    		
    		
    	}// COSTRUTTORE CLIENT
    	
    	public void RiceviChiavePubblica(){
    		
    		try{
    			
    		gkSocket.joinGroup(groupAddress);
    		byte [] buf = new byte [1000];
    		DatagramPacket packet = new DatagramPacket(buf, buf.length);
    		gkSocket.receive(packet);
    		serverAddress = packet.getAddress(); // RICAVO L'INDIRIZZO DEL SERVER DA CUI HO RICEVUTO LA CHIAVE PUBBLICA
    		
    		
    		X509EncodedKeySpec ks = new X509EncodedKeySpec(packet.getData());
    		
    		KeyFactory kf = KeyFactory.getInstance("RSA");
    		
    		PublicKey publicKey = kf.generatePublic(ks);
    		
    		cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    		
    		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    		
    		
    		}catch(IOException ioe){
    			ioe.printStackTrace();
    		}catch(Exception e){
    			try{
    				gkSocket.close();
    			}catch(Exception e2){
    			e2.printStackTrace();
    		 }
    		}
    		
    	}// RICEVI CHIAVE PUBBLICA
    	
    	public void InviaRichiesta(String richiesta){
    		
    		try{
    			socket = new Socket(serverAddress, serverPort);
    			
    			OutputStream out = socket.getOutputStream();
    			byte [] rich = cipher.doFinal(richiesta.getBytes());
    			out.write(rich);
    			
    			//RICEZIONE DELLA RICHIESTA IN CHIARO E STAMPA SU VIDEO DEL RISULTATO:
    			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    			String risultato = in.readLine();
    			System.out.println("Richiesta Ricevuta : " +risultato);
    			//
    			
    			out.close();
    			in.close();
    			
    						
    		}catch(IOException ioe){
    			ioe.printStackTrace();
    			
    		}catch(Exception e){
    			try{
    				socket.close();
    			}catch(Exception e2){
    			e2.printStackTrace();
    		 }
    		}
    		
    	}// INVIA RICHIESTA
    	
    	public static void main(String [] args){
    		
    		try{
    			
    		InetAddress groupAddress = InetAddress.getByName("224.0.0.1");
    		int serverPort = 3100;
    		int multicastPort = 5400;
    		
    		Client client = new Client(groupAddress , multicastPort , serverPort);
    		client.RiceviChiavePubblica();
    		client.InviaRichiesta("param");
    		
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		
    	}// MAIN
    		
    }// CLIENT
    Host :

    codice:
    import java.util.*;
    import java.io.*;
    import java.net.*;
    
    
    import java.security.*;
    import java.security.spec.*;
    import javax.crypto.*;
    
    
    public class Host extends Thread{
    	
    	private InetAddress groupAddress;
    	private int multicastPort;
    	private MulticastSocket mSocket;
    	
    	private Cipher decipher;  //CIPHER PER DECIFRARE LA RICHIESTA 
    	private KeyPair kp;
    	
    	public Host(InetAddress groupAddress , int multicastPort){
    		
    		this.groupAddress = groupAddress;
    		this.multicastPort = multicastPort;
    		
    		try{
    			
    			mSocket = new MulticastSocket(multicastPort);
    				
    			
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		
    	}//COSTRUTTORE HOST
    	
    	public void run(){
    		
    		try{
    			while(true){
    				
    				KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    				kpg.initialize(1024);
    				kp = kpg.generateKeyPair();
    				
    				byte [] buf = new byte [1000];
    				buf = kp.getPublic().getEncoded();
    				DatagramPacket packet = new DatagramPacket(buf , buf.length , groupAddress , multicastPort);
    				mSocket.send(packet);
    				Thread.sleep(1000); //FACCIAMO ATTENDERE PER INVIARE LA CHIAVE OGNI SECONDO
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}// RUN
    	
    	class gestisciRichieste extends Thread{
    		
    		Socket s;
    		
    		public gestisciRichieste(Socket s){
    			
    			this.s = s;
    			this.start();
    		}
    		
    		public void run(){
    			
    		 
    					
    		    try{
    		    	while(true){
    			  	   
    			   decipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    			   decipher.init(Cipher.DECRYPT_MODE , kp.getPrivate());
    			   
    			   InputStream in = s.getInputStream();
    			   byte [] richiestaByte = new byte [1000];
    			   int numByte = in.read(richiestaByte);
    			   richiestaByte = Arrays.copyOf(richiestaByte, numByte);
    			   byte [] richiestaDecriptata = decipher.doFinal(richiestaByte);
    			   
    			   String richiestaCalcolata = calcola(new String(richiestaDecriptata));
    			   
    			   PrintWriter out = new PrintWriter(s.getOutputStream() , true);
    			   out.println(richiestaCalcolata);
    			   
    			   in.close();
    			   out.close();
    
    
    			   
    		     }
    		    }catch(Exception e){
    			   try{
    				   s.close();
    			   }catch(Exception e2){
    			   e2.printStackTrace();
    		   }
    		  }
    		   
    	  }//RUN
    		
    	}//GESTISCI RICHIESTE	
    
    
    		public String calcola(String s){
    			return s;
    		}
    		
    		public static void main(String [] args){
    			
    			try{
    			
    			InetAddress groupAddress = InetAddress.getByName("224.0.0.1");
    			int multicastPort = 5400;
    			ServerSocket sSocket = new ServerSocket(3100);
    			
    			Host host = new Host(groupAddress , multicastPort);
    			host.start();
    			
    			while(true){
    				
    				Socket sclient = sSocket.accept();
    				gestisciRichieste gr = host.new gestisciRichieste(sclient);
    					
    			}
    		   }catch(Exception e){
    				e.printStackTrace();
    		   }
    			
    		}// MAIN	
    		
    }// HOST

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.