基于GUI的Java多线程文件服务器和客户端

时间:2018-04-01 09:02:43

标签: java file server client transfer

我正在做一项创建基于UI的客户端来发送和显示文件的任务。服务器将发送和接收文件(就像文件上传和下载到ftp一样)。 现在我只有两个问题

  

1)如果我们将文件发送到服务器以便从客户端将文件存储在磁盘上,它会将数据写入文件,然后存储名称为null的文件。(我知道这是因为我没有将文件名发送到服务器保存文件)。我想向服务器发送文件名和文件内容。我应该怎么做?

     

2)客户端和服务器都具有在Thread中运行的文件发送和文件接收方法。当客户端请求文件时,服务器的文件发送应该发送它,当客户端上传文件时   服务器的文件接收应该接受它。但是如果我只是启动MainMethod中的两个线程,其中一个说连接被拒绝。(因为文件接收意味着客户端的文件发送应该在文件接收服务器之前运行,反之亦然我该怎么办?

客户主要方法

public class MainMethod  {
   public static void main (String[] args) throws Exception {
    new FileScreen();
    new FileReceive().start();
    new FileSend().start();

}   

}

SERVER的主要方法

public class MainMethod {
public static void main (String[] args) throws IOException {
    new FileSend().start();
    new FileReceive().start();
}

}

终于客户端的FileSend

 public void run () {
       socket = serverSocket.accept ();    
       dis = new DataInputStream (socket.getInputStream ());
       dos = new DataOutputStream (socket.getOutputStream ());
       dos.writeUTF(Filename); //tried to send filename to server :does not work

       bufferedReader = new BufferedReader(new FileReader(path));
       while ( (data1 = bufferedReader.readLine ()) != null ){
        if ( flag == 0 ){
            fileData = data1;
            flag = 1;
        }else {
            fileData = fileData+"\n"+data1;
        }
    }
    bufferedReader.close ();
    dos.writeUTF (fileData);  //send file contents to server

}

SERVER的文件接收

    public void run () {
        downloadFileName = dis.readUTF();   //this line should read name :- not working
        downloadFileContent = dis.readUTF (); // this line works fine in absence of above line
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("/home/user/Client&Server/ServerReceive/"+downloadFileName));
        bufferedWriter.write (downloadFileContent);
        bufferedWriter.close ();

}

0 个答案:

没有答案