Facebook Badge

Saturday, February 11, 2012

Simulate FILE TRANSFER PROTOCOL over TCP - using Java Socket Programming


FTPServer.java

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


/**********************************
 * @author Rohit E Iyer
 * @date 03/02/2012
 *
 * ACN Practical No.1
 * Simulate FTP over TCP
 *
 * FTPServer.java
 * *******************************/

class FTPServer
{
public static void main(String args[])throws IOException
{
int c;
String s,inp;

//CONNECTION ESTABLISHMENT PHASE

ServerSocket ss=new ServerSocket(5432);

System.out.println("***WAITING for SERVER***\n\n");

Socket soc=ss.accept();

//DATA TRANSFER PHASE

System.out.println(soc+" AND SERVER CONNECTED!!!");
DataInputStream i=new DataInputStream(soc.getInputStream());
DataOutputStream o=new DataOutputStream(soc.getOutputStream());

getFilelist(i,o);

inp=i.readUTF(); //readUTF reads in Unicode Text Format hence

FileInputStream fin = new FileInputStream("F:/"+inp);

System.out.println("GET MESSAGE RECEIVED for FILE: "+inp);
while((c=fin.read())!=-1)
{
o.write(c);
o.flush();
}
fin.close();
}



public static void getFilelist(DataInputStream din,DataOutputStream dout) throws IOException
{
int p=0;
File folder = new File("F:/");
File[] listOfFiles = folder.listFiles();
for (File listOfFile : listOfFiles)

//listFiles() returns both files as well as directories so display only Files
if (listOfFile.isFile())
{
p++;
}
dout.write(p);
dout.flush();
for (File listOfFile : listOfFiles)
if (listOfFile.isFile())
{
dout.writeUTF(listOfFile.getName());
dout.flush();
}
}
}



-----------------------------------------------------------------------------------------------
FTPClient.java


import java.io.*;
import java.net.*;
import java.util.*;

/**********************************
 * @author Rohit E Iyer
 * @date 03/02/2012
 *
 * ACN Practical No.1
 * Simulate FTP over TCP
 *
 * FTPClient.java
 * *******************************/


class FTPClient
{
public static void main(String args[])throws IOException
{

String list[]=new String[20];
int p=0,ch;
Socket s=new Socket(InetAddress.getByName("localhost"),5432);
System.out.println("CLIENT connected to SERVER at"+ s);
DataInputStream i=new DataInputStream(s.getInputStream());
DataOutputStream o=new DataOutputStream(s.getOutputStream());

ch=getFile(i,o,list);

FileOutputStream fout = new FileOutputStream("F:/Download/"+list[ch-1]);
try
{
System.out.println("Transferring FILE: "+list[ch-1]+"\n\n");
do
{
ch=i.read();
fout.write(ch);
}while(ch!=-1);
}
catch(SocketException e) //Exception indicates FILE TRANSFER complete.
{
System.out.println("***FILE TRANSFER COMPLETE***");
}

}

public static int getFile(DataInputStream din,DataOutputStream dout,String flist[]) throws IOException
{
Scanner src=new Scanner(System.in);
int i=0,ch=0;
System.out.println("***FILE-LIST from SERVER***\n\n");
ch=din.read();
for(i=0;i<ch;i++)
{
flist[i]=din.readUTF();
System.out.println((i+1)+". "+flist[i]);
}
System.out.println("Enter File to be Requested");
ch=src.nextInt();
dout.writeUTF(flist[(ch-1)]);
dout.flush();
return (ch);
}
}

2 comments: