2016-04-09 24 views
-1

Bir TCP soketine dayalı bir FTP programı yazmam gerekiyordu ve FTPServer'ı yaratan bazı yardımları takdir ediyorum. değişkenler -class FTPServer.java için TCP soketine bağlı FTP programı

şunlardır:

socket, input, output, EXIT_CMD, PUT_CMD, GET_CMD 

yöntem vardır:

İşte
FTPServer(), receiveFile(), sendFile(), run(), main() 

şimdiye kadar benim kodudur:

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

public class FTPServer extends Thread 
{ 
    private Socket socket = null; 
    private DataInputStream input = null; 
    private DataOutputStream output = null; 
    final private String EXIT_CMD = "exit"; 
    final private String PUT_CMD = "put"; 
    final private String GET_CMD = "get"; 

    public FTPServer(Socket socket) 
    { 
     this.socket = socket 
     input = new DataInputStream(socket.getInputStream()); 
     output = new DataOutputStream(socket.getOutputStream()); 

     public void start() 
     { 
      if(thread == null) 
      { 
       thread = new Thread(this); 
       thread.start; 
      } 
     } 
    } 

    public void receiveFile() 
    { 
     //get file name 
     //write file 
     File file = new File(fileName); 
     FileOutputStream outFile = new FileOutputStream(file); 
     String line; 
     int ch; 
     do 
     { 
      line = intput.readUTF(); 
      ch = Integer.parseInt(line); 
      if(ch != -1); 
      ch = Integer.parseInt(line); 
      if(ch != -1); 
      outFile.write(ch); 
     } while(ch != -1); 

     outFile.close(); 
    } 

    public void sendFile() 
    { 
     output.writeUTF("READY"); 
     FileInputStream inFile = new FileInputStream(file); 
     int ch; 
     do 
     { 
      ch = inFile.read(); 
      output.writeUTF(String.valueOf(ch)); 
     } while(ch != -1); 

     inFile.close(); 
    } 

    public void run() 
    { 
     while(true) 
     { 
      String cmd = input.readUTF(); 

      if(cmd.equals(PUT_CMD) 
      { 
       receiveFile(); 
      } 
      if(cmd.equals(GET_CMD) 
      { 
       sendFile(); 
      } 
      if(cmd.equals(EXIT_CMD)) 
      { 
       System.exit(0); 
      } 
     } 
    } 

    public static void main(String[] args) throws Exception 
    { 
     //check parameters 
     if(args.length != 1) 
     { 
      System.out.println("Usage: java FTPServer <port>"); 
      return; 
     } 

     int port = Integer.parseInt(args[0]); 
     ServerSocket serverSocket = new ServerSocket(port); 
     System.out.println("Waiting..."); 

     while(true) 
     { 
      //open a socket for a client 
      Socket socket = serverSocket.accept(); 
      System.out.println("Connected to client"); 

      FTPServer server = new FTPServer(socket); 
     } 
    } 
} 

Bunun olabileceğini biliyorum Dağınıklık. Ama beni buraya getiren şey buydu.

+0

Yayında belirli bir soru göremiyorum. Sadece işini senin için bitirmemizi mi istiyorsun? –

+0

Gerçekten [RFC114] (https://tools.ietf.org/html/rfc114) 'de tanımlandığı gibi [Dosya Aktarım Protokolü] (https://en.wikipedia.org/wiki/File_Transfer_Protocol) mu demek istiyorsunuz? Sonra bu yazdığınızdan biraz daha fazla (ya da oldukça fazla) fazla alır. –

+0

FTPServer.java ve FTPClient.java'yı oluşturmam gerekiyor ... ama, FTPServer.java sınıfını bitirmeme yardım edebilecek biri var mı diye merak ediyordum? Oradan FTPClient sınıfını nasıl yapacağımı anlayabileceğimi düşünüyorum. TCP soketine dayalı bir istemci/ana bilgisayar FTP programı ... Bu benim ilk gönderiim ve gerçekten daha fazla nasıl netleşeceğini bilmiyorum. – Banger2448

cevap

0

Sadece FTP için en basit özelliklere sahip olmak istiyorsanız, sadece egzersiz için, o zaman oldukça yakınsınız.

Ben çoğunlukla gerek: çağrı basitçe server.run

  • hareket ana işlevi
  • ana işlevi ise döngü kurtulmak başka bir sınıfa ve()
+1

Çok teşekkür ederim! Evet, buradaki amacın sadece FTP'nin basit özelliklerini kullanmak olduğuna inanıyorum. – Banger2448

+0

Bir şey değil. Bu sana yardım ederse cevabımı iptal edebilir misiniz? –