2

さて、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();
    }
}
4

2 に答える 2

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);

}

}

}

> 

クライアント側:

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);

}

}

}
于 2015-10-18T05:23:46.697 に答える