无法通过LAN将文件从服务器发送到客户端

时间:2014-01-25 11:13:51

标签: java sockets lan

以下是服务器端和客户端的代码片段,用户可以通过该代码片段从服务器请求文件。服务器将发送文件。

有两个问题:

  • 服务器端发送空文件。
  • 当尝试在局域网中运行代码时,它正在提供ioexception

我不明白为什么服务器发送空文件,请帮助。

服务器端代码:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
 package ftpserverclient.FileClientServer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *
 * @author Arnab
 */
public class FileServer {

public static void main(String args[])throws IOException
         { 
             ServerSocket ss=null;
             try
             {  
                 ss=new ServerSocket(8085);
             }
             catch(IOException e)
             { 
                 System.out.println("couldn't listen");
                 System.exit(0);
             }
             Socket cs=null;
             try
             { 
                 cs=ss.accept();
                 System.out.println("Connection established"+cs);
             }
             catch(Exception e)
             { 
                 System.out.println("Accept failed");
                 System.exit(1);
             } 
             PrintWriter put=new PrintWriter(cs.getOutputStream(),true);
             BufferedReader st=new BufferedReader(new InputStreamReader(cs.getInputStream()));
             String s=st.readLine();


             String path = s ; 
             System.out.println("The requested file is path: "+path);
             System.out.println("The requested file is : "+s);
             File f=new File(path);
             if(f.isFile())
             { 
                 BufferedReader d=new BufferedReader(new FileReader(f));
                 String line;
                 while((line=d.readLine())!=null)
                 {
                     put.write(line);
                     put.flush();
                 }
                 d.close();
                 System.out.println("File transfered");
                 cs.close();
                 ss.close();
             } 
         }

}

客户端代码:

package ftpserverclient.FileClientServer;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 *
 * @author Arnab
 */
public class FileClient {

public static void main(String srgs[])throws IOException
{
    Socket s=null;
    BufferedReader get=null;
    PrintWriter put=null;
    try
    { 
        s=new Socket("127.0.0.1",8085);
        get=new BufferedReader(new InputStreamReader(s.getInputStream()));
        put=new PrintWriter(s.getOutputStream(),true);

        String u,f;
        System.out.println("Enter the file name to transfer from server:");
        DataInputStream dis=new DataInputStream(System.in);
        f=dis.readLine();
        put.println(f);

        File f1=new File(f);



        FileOutputStream  fs=new FileOutputStream(new File("C:\\PictureDestination\\a.jpg"));


        while((u=get.readLine())!=null)
        { 
            System.out.println(u);
            byte jj[]=u.getBytes();
            fs.write(jj);
        } 
        fs.close();
        System.out.println("File received");
        s.close();
    }catch(Exception e)
    {
        e.printStackTrace();
        System.exit(0);
    }
}       

}

2 个答案:

答案 0 :(得分:0)

在客户端,您在向服务器发送文件名时忘记在put.fflush();后写put.println(f);

答案 1 :(得分:0)

最后我发现这件事有用了。

这是变化。

String u,f;更改为String f; int u;while((u=get.readLine())!=null) { System.out.println(u); byte jj[]=u.getBytes(); fs.write(jj); } 成     while((u=get.read(jj,0,1024))!=-1) { fs.write(jj,0,u); } fs.close();

但仍存在1个问题。它无法在局域网上工作。