用于Java中文件传输的FTP客户端服务器模型

时间:2013-05-23 07:16:29

标签: java network-programming file-transfer ftp-client ftp-server

好吧,我正在尝试用Java实现ftp服务器和ftp客户端。我试图从服务器接收文件。以下是代码行。我能够实现服务器和客户端之间的连接,但也无法将文件名发送到服务器。那么任何人都可以指导我这种方法是否正确,或者如果没有,请建议适当的更改。

服务器的实施:

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

class MyServer {
    ServerSocket ss;
    Socket clientsocket;
    BufferedReader fromclient;
    InputStreamReader isr;
    PrintWriter toclient;

    public MyServer() {
        String str = new String("hello");
        try {
            // Create ServerSocket object.
            ss = new ServerSocket(1244);
            System.out.println("Server Started...");
            while(true) {
                System.out.println("Waiting for the request...");

                // accept the client request.
                clientsocket = ss.accept();

                System.out.println("Got a client");
                System.out.println("Client Address " + clientsocket.getInetAddress().toString());
                isr = new InputStreamReader(clientsocket.getInputStream());
                fromclient = new BufferedReader(isr);
                toclient = new PrintWriter(clientsocket.getOutputStream());

                String strfile;
                String stringdata;
                boolean file_still_present = false;

                strfile = fromclient.readLine();

                System.out.println(strfile);
                //toclient.println("File name received at Server is  " + strfile);

                File samplefile = new File(strfile);
                FileInputStream fileinputstream = new FileInputStream(samplefile);
                // now ready to send data from server ..... 
                int notendcharacter;
                do {
                    notendcharacter = fileinputstream.read();
                    stringdata = String.valueOf(notendcharacter);
                    toclient.println(stringdata);

                    if (notendcharacter != -1) {
                        file_still_present = true;
                    } else {
                        file_still_present = false;
                    }
                } while(file_still_present); 

                fileinputstream.close();    
                System.out.println("File has been send successfully .. message print from server");

                if (str.equals("bye")) {
                  break;
                }

                fromclient.close();
                toclient.close();
                clientsocket.close();
            }
        } catch(Exception ex) {
            System.out.println("Error in the code : " + ex.toString());
        }
    }

    public static void main(String arg[]) {
        MyServer serverobj = new MyServer();
    }
}

客户的实施:

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

class MyClient {
    Socket soc;
    BufferedReader fromkeyboard, fromserver;
    PrintWriter toserver;
    InputStreamReader isr;

    public MyClient() {
        String str;
        try {
            // server is listening on this port.
            soc = new Socket("localhost", 1244);

            fromkeyboard = new BufferedReader(new InputStreamReader(System.in));
            fromserver = new BufferedReader(new InputStreamReader(soc.getInputStream()));

            System.out.println("PLEASE ENTER THE MESSAGE TO BE SENT TO THE SERVER");
            str = fromkeyboard.readLine();
            System.out.println(str);
            String ddd;
            ddd = str;
            toserver = new PrintWriter(soc.getOutputStream());

            String strfile;
            int notendcharacter;
            boolean file_validity = false;
            System.out.println("send to server" + str);

            System.out.println("Enter the filename to be received from server");
            strfile = fromkeyboard.readLine();
            toserver.println(strfile);

            File samplefile = new File(strfile);
            //File OutputStream helps to get write the data from the file ....
            FileOutputStream fileOutputStream = new FileOutputStream(samplefile);

            // now ready to get the data from server .... 
            do {
                str = fromserver.readLine();
                notendcharacter = Integer.parseInt(str);

                if (notendcharacter != -1) {
                    file_validity = true;
                } else {
                    System.out.println("Read and Stored all the Data Bytes from the file ..." +
                        "Received File Successfully");
                }
                if (file_validity) {
                    fileOutputStream.write(notendcharacter);
                }
            } while(file_validity);

            fileOutputStream.close();

            toserver.close();
            fromserver.close();
            soc.close();
        } catch(Exception ex) {
            System.out.println("Error in the code : " + ex.toString());
        }
    }

    public static void main(String str[]) {
        MyClient clientobj = new MyClient();
    }
}

2 个答案:

答案 0 :(得分:4)

上述问题的答案是:

FTP客户端:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class FileClient {
    public static void main(String[] args) throws Exception {

        long start = System.currentTimeMillis();

        // localhost for testing
        Socket sock = new Socket("127.0.0.1", 13267);
        System.out.println("Connecting...");
        InputStream is = sock.getInputStream();
        // receive file
        new FileClient().receiveFile(is);
        OutputStream os = sock.getOutputStream();
        //new FileClient().send(os);
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        sock.close();
    }


    public void send(OutputStream os) throws Exception {
        // sendfile
        File myFile = new File("/home/nilesh/opt/eclipse/about.html");
        byte[] mybytearray = new byte[(int) myFile.length() + 1];
        FileInputStream fis = new FileInputStream(myFile);
        BufferedInputStream bis = new BufferedInputStream(fis);
        bis.read(mybytearray, 0, mybytearray.length);
        System.out.println("Sending...");
        os.write(mybytearray, 0, mybytearray.length);
        os.flush();
    }

    public void receiveFile(InputStream is) throws Exception {
        int filesize = 6022386;
        int bytesRead;
        int current = 0;
        byte[] mybytearray = new byte[filesize];

        FileOutputStream fos = new FileOutputStream("def");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(mybytearray, 0, mybytearray.length);
        current = bytesRead;

        do {
            bytesRead = is.read(mybytearray, current,
                    (mybytearray.length - current));
            if (bytesRead >= 0)
                current += bytesRead;
        } while (bytesRead > -1);

        bos.write(mybytearray, 0, current);
        bos.flush();
        bos.close();
    }
} 

FTP服务器:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class FileServer {
    public static void main(String[] args) throws Exception {
        // create socket
        ServerSocket servsock = new ServerSocket(13267);
        while (true) {
            System.out.println("Waiting...");

            Socket sock = servsock.accept();
            System.out.println("Accepted connection : " + sock);
            OutputStream os = sock.getOutputStream();
            //new FileServer().send(os);
            InputStream is = sock.getInputStream();
            new FileServer().receiveFile(is);
            sock.close();
        }
    }

    public void send(OutputStream os) throws Exception {
        // sendfile
        File myFile = new File("/home/nilesh/opt/eclipse/about.html");
        byte[] mybytearray = new byte[(int) myFile.length() + 1];
        FileInputStream fis = new FileInputStream(myFile);
        BufferedInputStream bis = new BufferedInputStream(fis);
        bis.read(mybytearray, 0, mybytearray.length);
        System.out.println("Sending...");
        os.write(mybytearray, 0, mybytearray.length);
        os.flush();
    }

    public void receiveFile(InputStream is) throws Exception {
        int filesize = 6022386;
        int bytesRead;
        int current = 0;
        byte[] mybytearray = new byte[filesize];

        FileOutputStream fos = new FileOutputStream("def");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(mybytearray, 0, mybytearray.length);
        current = bytesRead;

        do {
            bytesRead = is.read(mybytearray, current,
                    (mybytearray.length - current));
            if (bytesRead >= 0)
                current += bytesRead;
        } while (bytesRead > -1);

        bos.write(mybytearray, 0, current);
        bos.flush();
        bos.close();
    }
} 

答案 1 :(得分:0)

>

服务器端

import java.io.*;

import java.net.*;

class serversvi

{

public static void main(String svi[])throws IOException

{

try

{

ServerSocket servsock=new ServerSocket(105);

DataInputStream dis=new DataInputStream(System.in);

System.out.println("enter the file name");

String fil=dis.readLine();

System.out.println(fil+" :is file transfer");

File myfile=new File(fil);

while(true)

{

Socket sock=servsock.accept();

byte[] mybytearray=new byte[(int)myfile.length()];

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(myfile));

bis.read(mybytearray,0,mybytearray.length);

OutputStream os=sock.getOutputStream();

os.write(mybytearray,0,mybytearray.length);

os.flush();

sock.close();

}

}


catch(Exception saranvi)

{

System.out.print(saranvi);

}

}

}

> 

Client side:

import java.io.*;

import java.net.*;

class clientsvi

{

public static void main(String svi[])throws IOException

{

try

{

Socket sock=new Socket("localhost",105);

byte[] bytearray=new byte[1024];

InputStream is=sock.getInputStream();

DataInputStream dis=new DataInputStream(System.in);

System.out.println("enter the file name");

String fil=dis.readLine();

FileOutputStream fos=new FileOutputStream(fil);

BufferedOutputStream bos=new  BufferedOutputStream(fos);

int bytesread=is.read(bytearray,0,bytearray.length);

bos.write(bytearray,0,bytesread);

System.out.println("out.txt file is received");

bos.close();

sock.close();

}

catch(Exception SVI)

{

System.out.print(SVI);

}

}

}