如何在客户端/服务器Java应用程序中传输文件

时间:2010-09-25 16:43:05

标签: java sockets network-programming client-server

我目前正在做家庭作业,我完全被困住了。我是最后一个问题,我无法弄清楚如何完成最后一项任务。以下是我必须完成的任务:


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

  2. 测试你的程序。确保它有效 使用二进制文件,而不仅仅是文本 文件。确保两者都有效 程序在同一台机器上 当他们被分开时 网络。


  3. 到目前为止,当我启动服务器时,它会询问我想要使用的端口。然后我启动客户端,它询问使用什么IP和端口。服务器立即发送主目录“server”文件夹中的文件列表。然后我用客户端回复我想下载的文件号。这是我被卡住的地方。我似乎无法找到有关如何执行此操作的任何信息。因此,您可以在我下面发布的代码中看到,我正在尝试使用FileInputReader将文件转换为字节数组。然后我发送给客户。然后我尝试将FileOutputReader收到的字节数组添加到文件中。但我似乎无法找到正确的方法来做到这一点,或者即使我正确地做到了这一点。

    客户端

            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);
    
            }
        }
    }
    

    如果有人可以提供任何建议或正确的课程或方法,我将不胜感激。

    提前谢谢。

4 个答案:

答案 0 :(得分:1)

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

使用Socket(Server&amp; Client)可以轻松完成。使用byte []传输文件将确保您的程序可以同时使用ascii和二进制文件。

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

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

答案 1 :(得分:0)

您可以通过Sun(Oracle)查看此tutorial。这应该让您对套接字有基本的了解。

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

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

答案 2 :(得分:0)

如果您可以使用IO库,我会建议Netty或Mina。这里有一些网络示例:http://jboss.org/netty/documentation.html
即使你不能使用图书馆,这些也可能有助于学习如何完成任务。

答案 3 :(得分:0)

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