aspose file tools*
The moose likes Sockets and Internet Protocols and the fly likes FTP Socket Programming Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Sockets and Internet Protocols
Bookmark "FTP Socket Programming" Watch "FTP Socket Programming" New topic
Author

FTP Socket Programming

Tony Smith
Greenhorn

Joined: Nov 20, 2003
Posts: 4
Hi guys!
I was wondering if any of you could help me out. I've basically got 3 Java programs. One is called "Copier.java" which lets the user specify the location of a txt file to be copied to a new location on the computer.
The other two are called "FileServer" and "FileClient" and when they are both running, the client program asks for a txt file to fetch and then displays the contents of the txt file in the command prompt (as using j2sdk1.4.2_02 not Jbuilder etc).
With those files I have to create the following:
To produce an application that sends a string to a server specifying a filename, and the server opens that file and reads(displays) it. The file name and it contents are then sent to a client residing somewhere else on the PC. I knoiw this is easy, but i've never used Java before and any pointers will be very helpful.
Aims:
* To design the above (�file transfer� application)
* To implement the above using TCP sockets
Basically, all I have to do is merge the "Copier.java" program to the "FileServer.java" and "FileClient.java" to acehive this, but i'm getting nowhere!
I'll post the codes below:
Thanks!
Tony Smith
Greenhorn

Joined: Nov 20, 2003
Posts: 4
// Copier.java
import java.io.*;
public class Copier
{
public static void main(String[] args)
{
String inFileName, outFileName, currentLine;
BufferedReader inFile;
PrintWriter outFile;
// All kinds of i/o errors can jump up and byte us--disk-full errors,
// non-existent files, you name it--so here and in the following files
// we basically wrap everything in a "try"
try
{
System.out.println("I am a file copier");
// Let the user specify the file to be copied and the name of the output
// file. We can get the user's keystrokes from System.in, but System.in is
// a raw InputStream, so we convert it to something friendlier--something
// we can call readLine() on

BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter input filename:");
inFileName = keyIn.readLine();
System.out.println("Enter output filename:");
outFileName = keyIn.readLine();
keyIn.close();
// With the names in hand, we get the input and output streams of the
// corresponding files, and again turn them into more easily usable objects

inFile = new BufferedReader(new InputStreamReader(new FileInputStream(inFileName)));
outFile = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outFileName)));

// now loop over the input object, reading a line at a time, and writing that
// value to the output object; readLine() is defined to return null when the
// input terminates

while ((currentLine = inFile.readLine()) != null)
outFile.println(currentLine);

// release the streams
inFile.close();
outFile.close();
}
catch (FileNotFoundException e)
{
System.out.println("Couldn't get files.");
}
catch (IOException e)
{
System.out.println("Bad i/o happened.");
}
}
}
Tony Smith
Greenhorn

Joined: Nov 20, 2003
Posts: 4
// FileServer.java
import java.net.*;
import java.io.*;

public class FileServer
{
private static final int PORT = 9999;
public static void main(String[] argv)
{
String inFileName, currentLine;
try
{
System.out.println("FileServer running");
// Listen for inbound connections, when one comes in, get the Socket object for it,
// and convert the streams of that socket
ServerSocket s = new ServerSocket(PORT, 1);
Socket conn = s.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()), true);
// Get the filename from the client
inFileName = br.readLine();
// Get an input stream for the corresponding file and turn it into a BufferedReader
BufferedReader inFile = new BufferedReader(new InputStreamReader(new FileInputStream(inFileName)));
// Read the file line by line, and write it back over the network
while ((currentLine = inFile.readLine()) != null)
pw.println(currentLine);
br.close();
pw.close();
inFile.close();
conn.close();
}
catch (Exception e)
{
System.out.println("Oops.");
}
}
}
Tony Smith
Greenhorn

Joined: Nov 20, 2003
Posts: 4
// FileClient.java
import java.net.*;
import java.io.*;

public class FileClient
{
private static final int SERVERPORT = 9999;
public static void main(String[] argv)
{
String inFileName, s;
try
{
System.out.println("I am a file fetcher");
// Get the filename
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter name of file to fetch");
inFileName = keyIn.readLine();
// Open the connection to the server and convert the raw streams
Socket conn = new Socket("my-pc", SERVERPORT);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()), true);
// Send the filename to the server
pw.println(inFileName);
// Read the results line by line, and write them to the display (we could of
// course get a PrintWriter corresponding to a local file, and write the
// results there instead
while ((s = br.readLine()) != null)
System.out.println(s);
br.close();
pw.close();
conn.close();
}
catch (Exception e)
{
System.out.println("Oops.");
}
}
}
Joe Ess
Bartender

Joined: Oct 29, 2001
Posts: 8996
    
    9

This sounds like a homework assignment, so I'm going to start slow. Notice how the client, server and copier all have BufferedReader instances? Streams in Java work the same way whether one is writing to a file, socket, database, whatever. Where are you reading the file from? Open a BufferedReader there. Where are you writing the file to? Open a BufferedWriter there. Connect the dots.


[How To Ask Questions On JavaRanch]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: FTP Socket Programming