Salve a tutti! Per scopi didattici sto cercando di capire a fondo il protocollo FTP e per mettere in pratica lo studio teorico vorrei provare ad implementare un server ed client fittizzi giusto per capire se quanto ho appreso è corretto.
Da quanto si legge nella RFC 959 il server si pone in ascolto di nuove connessioni su una porta L=21; quando un client si connette instaura una connessione di controllo utilizzando una qualsiasi porta locale (U) assegnatagli dal sistema che comunicherà al server; nel momento in cui il client impartisce un comando di trasferimento il server crea una connessione sulla porta locale L-1=20 e la porta del client U.
Ora la mia domanda è: come fa il client ad accettare connessioni sulla porta U?
Ho provato a realizzare il tutto in java come segue
ma come mi aspettavo sul client viene sollevata una bind exception e sul server una connection refused.
Avete qualche idea??? Grazie infinite a tutti coloro che mi risponderanno.
Da quanto si legge nella RFC 959 il server si pone in ascolto di nuove connessioni su una porta L=21; quando un client si connette instaura una connessione di controllo utilizzando una qualsiasi porta locale (U) assegnatagli dal sistema che comunicherà al server; nel momento in cui il client impartisce un comando di trasferimento il server crea una connessione sulla porta locale L-1=20 e la porta del client U.
Ora la mia domanda è: come fa il client ad accettare connessioni sulla porta U?
Ho provato a realizzare il tutto in java come segue
Codice:
// codice del server
try {
socket = new ServerSocket(21);
System.out.println("Socket successfully created\nWaiting for incoming connection");
Socket clientSocket = socket.accept();
System.out.println("Connection established with " + clientSocket.getInetAddress());
ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
Integer port = (Integer) ois.readObject();
System.out.println("Client's port: " + port);
System.out.print("Establishing connection with remote host...");
Socket remHost = new Socket(clientSocket.getInetAddress(), port);
System.out.println("success");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Codice:
// codice del client
InetAddress address = InetAddress.getLocalHost();
int port = 21;
Socket socket = new Socket(address, port);
System.out.println("Established connection with host");
ObjectOutputStream oop = new ObjectOutputStream(socket.getOutputStream());
oop.writeObject(socket.getLocalPort());
ServerSocket serverSocket = new ServerSocket(port);
serverSocket.accept();
socket.close();
ma come mi aspettavo sul client viene sollevata una bind exception e sul server una connection refused.
Avete qualche idea??? Grazie infinite a tutti coloro che mi risponderanno.