2010-09-25 25 views
0

我目前正在做一个家庭作业任务,并且我被彻底卡住了。我在最后一个问题上,我无法弄清楚如何去完成最后的任务。下面是我必须完成的任务:如何在客户端/服务器Java应用程序中传输文件


  1. 客户端应该 将文件保存在“客户端” 子目录的主目录。

  2. 测试你的程序。确保它与二进制文件一起工作 ,而不仅仅是文本 文件。当 程序与 位于同一台机器上时,以及当它们通过网络上的 分隔时,请确保它正常工作。


至此,当我启动服务器时,它会询问我要使用哪个端口。然后我启动客户端并询问要使用哪个IP和端口。服务器立即发送主目录“server”文件夹中的文件列表。然后,我与客户一起回复我希望下载的文件编号。这是我卡住的地方。我似乎无法找到任何有关如何做到这一点的信息。正如你可以在我的代码下面看到的,我正在尝试使用FileInputReader将文件转换为字节数组。然后我将它发送给客户。然后我尝试将FileOutputReader接收到的字节数组转换为文件。但我似乎无法找到正确的方法来做到这一点,或者即使我正确地做到了这一点。

CLIENT

 int i = 0; 
     while(i < 1000){ 
     String modifiedSentence = inFromServer.readLine(); 
     System.out.println("From Server: " + modifiedSentence); 
     i++; 
     } 

     while(j < 1000) { 
     int byteString = inFromServer.read(); 
     ArrayList<byte[]> bytes = new ArrayList<byte[]>(); 
     bytes.add(byteString); 
     } 
     Integer byteInt = new Integer(byteString); 
     FileOutputStream fo = new FileOutputStream(System.getProperty("user.home")+ "/client/text.txt"); 
     fo.write(byteInt.byteValue()); 

    } 
} 

服务器

  byte[] bytes = new byte[1024]; 
      FileInputStream fi = new FileInputStream(file.toString() + fileArray[userChoiceInt]); 
      fi.read(bytes, 0, 1024); 
      outToClient.write(bytes, 0, 1024); 

     } 
    } 
} 

如果有人可以提供任何意见或正确的类或使用我将不胜感激方法。

预先感谢您。

+0

由于这是作业,你允许使用第三方库吗?您基本上重新创建FTP,在Java中存在有用的FTP库。 – BalusC 2010-09-25 17:33:58

+0

是的,你是正确的,我不能使用任何第三方库。 :( – 2010-09-26 00:57:47

回答

1

不破坏整个事情这里有一些提示。

这可以通过使用套接字(服务器&客户端)轻松完成。使用byte []传输文件将确保您的程序可以同时使用ascii和二进制文件。

另一种方法是使用远程方法调用(RMI)中的构建。我没有使用这种方法传输文件,但我相信这是可行的。

如果您不知道,通过以下调用获取用户主目录:System.getProperty(“user.home”);

0

Sun(Oracle)可以查看tutorial。这应该会让你对套接字有一个基本的了解。

然而,我似乎注意到,在客户端,你迭代了一个特定的次数(1000),这不是一个好主意,因为一般来说,你不知道要发送的文件的大小,教程应该显示这一点以及如何进行适当的更改。此外,您一直在循​​环中创建结构,因此除了每次创建新的数据结构之外,都会丢失您收到的任何信息,这是效率低下的。

你所要做的就是从循环之外移动结构的初始化。另外,对于modifiedSentence变量,您可能需要将其从字符串更改为StringBuilder

+0

哇,是啊,这是可怕的事实,我不断实例化一个新的ArrayList每次真的打败了目的,谢谢指出,至于while(i <1000),我使用while(true) ,但是它永远不会离开循环,我也尝试了对socket.ready()方法的调用;但是这似乎并不奏效,感谢您的建议,我正在查看您现在发布的教程。 – 2010-09-26 01:01:28

+0

您应该读取,直到套接字返回-1(如果您正在读取字节)或null(如果您正在读取字符串) – npinti 2010-09-26 07:31:59

0

你可能不应该问如何在这样的网站在课堂上做功课。这是不合适的。你的服务器确实看起来很好。你的程序只能读取高达1024字节的文件。您应该更详细地查看java.io.File。有一个长度方法可以用来查找文件的长度,所以你知道要发送多少。

相关问题