FTP服务器和计算机之间的多个客户端

时间:2016-05-29 09:17:20

标签: java ftp

我对在客户端之间传输文件的功能性FTP服务器和客户端有所帮助。问题是,我试图在另一台计算机上运行客户端,即使服务器在第一台计算机上处​​于活动状态,客户端根本不会连接。

我尝试更改端口,提供IP地址而不是localhost,停用防火墙,但它仍然拒绝连接到客户端。

错误代码如下:java.net.ConnectException:Connection refused

更令人困惑的是,上传和下载文件的整个过程在一台计算机上运行完美。

我再说一遍,我需要找到一种方法将文件上传到服务器并通过另一台计算机上的客户端下载,或者让服务器充当客户端之间的链接,并使用多个客户端上传和下载文件他们之间。

这是我的代码:

FTP服务器

//FtpServer.java
import java.io.*;
import java.net.*;

public class FtpServer
{
     public static void main(String [] args)
     {
          int i=1;

System.out.println("******************************************************
**************************");
          System.out.println("******************************   FTP 
SERVER
***********************************");

System.out.println("******************************************************
**************************");
          System.out.println("Server Started...");
          System.out.println("Waiting for connections...");
          System.out.println("
");
          try
          {

               ServerSocket s = new ServerSocket(100);
               for(;;)
               {
                    Socket incoming = s.accept();
                    System.out.println("New Client Connected with id " 
+ i
+" from "+incoming.getInetAddress().getHostName()+"..." );
                    Thread t = new ThreadedServer(incoming,i);
                    i++;
                    t.start();
               }
          }
          catch(Exception e)
          {
               System.out.println("Error: " + e);
          }
     }
}

class ThreadedServer extends Thread
{
     int n;
     String c,fn,fc;
     String filenm;
     Socket incoming;
     int counter;
     String dirn="c:/FTP SERVER DIRECTORY";
     public ThreadedServer(Socket i,int c)
     {
          incoming=i;
          counter=c;
     }

     public void run()
     {
          try
          {

               BufferedReader in =new BufferedReader(new
InputStreamReader(incoming.getInputStream()));
               PrintWriter out = new
PrintWriter(incoming.getOutputStream(), true);
               OutputStream output=incoming.getOutputStream();
               fn=in.readLine();
               c=fn.substring(0,1);

               if(c.equals("#"))
               {
               n=fn.lastIndexOf("#");
               filenm=fn.substring(1,n);
               FileInputStream fis=null;
               boolean filexists=true;
               System.out.println("Request to download file "+filenm+"
recieved from "+incoming.getInetAddress().getHostName()+"...");
               try
                 {
                  fis=new FileInputStream(filenm);
                 }
               catch(FileNotFoundException exc)
                 {
                  filexists=false;
                  System.out.println("FileNotFoundException:
"+exc.getMessage());
                 }
                if(filexists)
                {
                 sendBytes(fis, output) ;
         fis.close();
                }
               }
              else
                 {
                  try
                  {
                  boolean done=true;
                  System.out.println("Request to upload file " +fn+"
recieved from "+incoming.getInetAddress().getHostName()+"...");

                  File dir=new File(dirn);
                  if(!dir.exists())
                  {
                   dir.mkdir();
                  }
                  else
                  {}
                    File f=new File(dir,fn);
                    FileOutputStream fos=new FileOutputStream(f);
                    DataOutputStream dops=new DataOutputStream(fos);

                   while(done)
                   {
                    fc=in.readLine();
                    if(fc==null)
                    {
                     done=false;
                    }
                    else
                    {
                     dops.writeChars(fc);
                    // System.out.println(fc);

                    }
                 }
                 fos.close();
                 }
                 catch(Exception ecc)
                 {
                  System.out.println(ecc.getMessage());
                 }
                }
               incoming.close();
          }
          catch(Exception e)
          {
               System.out.println("Error: " + e);
          }
     }
     private static void sendBytes(FileInputStream f,OutputStream op)
throws Exception
     {
      byte[] buffer=new byte[1024];
      int bytes=0;

      while((bytes=f.read(buffer))!=-1)
      {
       op.write(buffer,0,bytes);
      }
     }
}

这是FTPClient

    //FtpClient.java

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
class FtpClient extends JFrame implements ActionListener
{
 String fn,filenm;
 String fc;
 String dirn="c:/FTP CLIENT DIRECTORY";
 JPanel pnl;
 JLabel lbltle,lblud;
 Font fnt;
 JTextField txtfn;
 JButton btnu,btnd;
 Socket s;
 InputStreamReader in;
 OutputStream out;
 BufferedReader br;
 PrintWriter pw;
 public FtpClient()
 {
  super("FTP CLIENT");

  pnl=new JPanel(null);

  fnt=new Font("Times New Roman",Font.BOLD,25);

  lbltle=new JLabel("FTP CLIENT");
  lbltle.setFont(fnt);
  lbltle.setBounds(225,35,200,30);
  pnl.add(lbltle);

  lblud=new JLabel("ENTER  FILE-NAME :");
  lblud.setBounds(100,100,150,35);
  pnl.add(lblud);

  txtfn=new JTextField();
  txtfn.setBounds(300,100,200,25);
  pnl.add(txtfn);

  btnu=new JButton("UPLOAD");
  btnu.setBounds(150,200,120,35);
  pnl.add(btnu);


  btnd=new JButton("DOWNLOAD");
  btnd.setBounds(320,200,120,35);

  pnl.add(btnd);

  btnu.addActionListener(this);
  btnd.addActionListener(this);
  getContentPane().add(pnl);

  try
  {
  s=new Socket("localhost",100);
  br=new BufferedReader(new InputStreamReader(s.getInputStream()));
  pw=new PrintWriter(s.getOutputStream(),true);
  out=s.getOutputStream();
  }
  catch(Exception e)
  {
   System.out.println("ExCEPTION :"+e.getMessage());
  }
 }
 public void actionPerformed(ActionEvent e)
 {
  if(e.getSource()==btnu)
  {
   try
   {
   filenm=txtfn.getText();
   pw.println(filenm);
   FileInputStream  fis=new FileInputStream(filenm);
   byte[] buffer=new byte[1024];
   int bytes=0;

   while((bytes=fis.read(buffer))!=-1)
   {
    out.write(buffer,0,bytes);
   }
   fis.close();
  }
  catch(Exception exx)
  {
   System.out.println(exx.getMessage());
  }
  }

  if(e.getSource()==btnd)
  {
   try
   {
   File dir=new File(dirn);
   if(!dir.exists())
   {
    dir.mkdir();
   }
   else{}
   boolean done=true;
   filenm=txtfn.getText();
   fn=new String("#"+filenm+"#");
   //System.out.println(filenm);
   pw.println(fn);
   File f=new File(dir,filenm);
   FileOutputStream fos=new FileOutputStream(f);
   DataOutputStream dops=new DataOutputStream(fos);
   while(done)
   {
     fc=br.readLine();
     if(fc==null)
     {
     done=false;
     }
    else
        {
          dops.writeChars(fc);
       //  System.out.println(fc);

        }
    }
   fos.close();
  }

  catch(Exception exx)
  {}

  }
 }
 public static void main(String args[])
 {
  FtpClient ftpc=new FtpClient();
  ftpc.setSize(600,300);
  ftpc.show();
 }
}

旁注:String dirn =“c:/ FTP CLIENT DIRECTORY”和String dirn =“c:/ FTP SERVER DIRECTORY”用于文​​件上传的位置(Server)和另一个文件所在的位置使用客户端(在另一台计算机上)下载服务器

这是我第一次使用网络代码,我希望我的代码更正版本,我不知道我哪里做错了。

0 个答案:

没有答案