Oppure

Loading
07/12/10 17:59
crashoverride
Ciao, ho programmato una semplice applicazione per inviare file attraverso i socket... Per ora è ancora semplice e da migliorare... Però dopo aver fatto diciamo la "base" che permette appunto l'invio di file ho deciso di provarla ovviamente non solo in locale ma anche con 2 pc collegati tramite 2 servizi internet (scusate ma non sò come dirlo xD) diversi per vedere se funziona... Ho inserito nel client quando viene creato il socket l'indirizzo ip preso tramite whatismyipaddress.com/ viene inserito nel costruttore...
Ora vengono i problemi, infatti in locale funziona correttamente e senza problemi mentre con i 2 pc diversi no...
Come posso risolvere??

Vi lascio anche il sorgente:

Server
import java.net.*;
import java.io.*;

public class Server{
	
	private ServerSocket ss;
	
	private File myFile;
	private String fileName;
	
	public void setFile(File file){
		myFile = file;
		fileName = myFile.getName();
	}
	
	public Server(File file) throws IOException{
		//Settiamo il file da inviare.
		setFile(file);
		
		//Creiamo il socket del server che accetta connessioni 
		//sulla porta 9999;
		
		ss = new ServerSocket(9999);
		
		//Crea il socket che invia il nome del file
		Socket nameSenderSocket = ss.accept();
		PrintStream ps = new PrintStream(nameSenderSocket.getOutputStream());
		ps.println(fileName);
		nameSenderSocket.close();
		
		//Legge il file e lo inserisce nell'array binaryFile
		FileInputStream fis = new FileInputStream(myFile);
		byte[] binaryFile = new byte[(int)myFile.length()];
		fis.read(binaryFile);
		
		//Accetta la connessione dal Client e inserisce il socket 
		//Ricevuto nel socket s che useremo per inviare il file al client.
		Socket s = ss.accept();
		
		//Ottentiamo l'outputstream del socket che si sta connettendo
		//e inviamo il file.
		OutputStream os = s.getOutputStream();		
		os.write(binaryFile);
		
		//Chiudiamo i stream e il socket.
		fis.close();
		os.close();
		s.close();

	}
	
	public static void main (String args[]) throws IOException{
		Server s = new Server(new File("file.rtf"));
	}
}


Client
import java.io.*;
import java.net.*;

public class Client {
	public Client() throws IOException {
				
		Socket s = new Socket("**.**.***.85",9999);
		DataInputStream dis = new DataInputStream(s.getInputStream());
		String fileName = dis.readLine();
		s.close();
		
		
		System.out.println(fileName);
		
		File inputFile = new File(fileName);
		
		Socket connessione = new Socket("**.**.***.85",9999);
		
		InputStream is = connessione.getInputStream();
		FileOutputStream fos = new FileOutputStream(inputFile);
		
		int b = 0;
		while((b = is.read()) != -1){
			fos.write(b);
		}
	}
	public static void main(String args[]) throws IOException{
		Client c = new Client();
	}
}


Ripeto che il programma deve esere migliorato ma prima di migliorarlo volevo vedere che funzionasse in modo giusto :)

Attendo risposta :)
aaa
07/12/10 19:32
HeDo

se il computer server è dietro nat devi aprire le porte corrispondenti sul router, oltre al fatto che eventuali firewall bloccano tutte le connessioni non autorizzate.
aaa
07/12/10 20:56
crashoverride
Ok, come faccio? ;)
Ma non c'è un altro modo? Perchè se io distribuisco questo software è un casino perchè tutti devono modificare le porte del Router ecc...

Grazie :k:
aaa
07/12/10 21:04
HeDo
Postato originariamente da crashoverride:

Ok, come faccio? ;)
Ma non c'è un altro modo? Perchè se io distribuisco questo software è un casino perchè tutti devono modificare le porte del Router ecc...

Grazie :k:


l'altro modo è appoggiarsi a dei server che gestiscano loro il discover dei client e server del tuo programma (tipo trackers), ma anche qui, se entrambi i computer sono sotto nat NON c'è modo di uscirne, neanche con una reverse connection dal server al client.
aaa
07/12/10 21:14
crashoverride
Ok, quindi diciamo che è un casino? xD Mi sai dire come fare allora a modificare il router? :) Grazie mille.
aaa
07/12/10 21:28
HeDo
Postato originariamente da crashoverride:

Ok, quindi diciamo che è un casino? xD Mi sai dire come fare allora a modificare il router? :) Grazie mille.


cosa vuol dire modificare il router?
aaa
07/12/10 21:40
crashoverride
Postato originariamente da HeDo:

Postato originariamente da crashoverride:

Ok, quindi diciamo che è un casino? xD Mi sai dire come fare allora a modificare il router? :) Grazie mille.


cosa vuol dire modificare il router?


scusa, intendevo aprire le porte...
aaa
07/12/10 23:11
crashoverride
Ci tengo a dire che io non ho un router ma un access point a cui si collega il cavo di internet...
Come faccio quindi ad aprire le porte?
Perchè io sono entrato nelle impostazioni di access point ma non ho trovato nulla...

Attendo risposta...
aaa