【发布时间】:2013-06-15 12:33:58
【问题描述】:
我正在尝试在 Java 中创建一个简单的 UDP 文件传输应用程序(服务器和客户端),但我几乎没有这方面的经验,仍在学习一些基础知识。例如,我设法制作了一个功能性应用程序,可以将选定的文件从我的笔记本电脑发送到我的桌面,但使用 TCP。
基本上,我想做的是一个应用程序,您可以在其中选择一个选项来列出服务器上的文件(特定的默认文件夹,在本例中为 C:\Sharefolder),一个将文件上传到服务器的选项,以及从服务器下载文件的另一个选项。就客户端中的方法而言,我该如何做到这一点?
这是我迄今为止为客户提供的代码,我不知道我是否朝着正确的方向前进。我在底部区域还有一些旧的 TCP 程序代码,所以没关系。
public class Client {
private final static int PACKETSIZE = 100 ;
public static void upload(String ipadd, String iport, String fname) {
DatagramSocket socket = null ;
try {
InetAddress host = InetAddress.getByName(ipadd);
int port = Integer.parseInt(iport);
socket = new DatagramSocket(port, host) ;
File file = new File("C:\\Sharefolder\\" +fname);
long size = file.length();
if (size > Integer.MAX_VALUE) {
System.out.println("File too big");
}
byte[] bytes = new byte[(int) size];
for(int i=0; i<size; i++) {
//Send file bytes to a byte array?
}
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, host, port ) ;
byte[] bytes = new byte[(int) size];
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
int count;
while ((count = bis.read(bytes)) > 0) {
out.write(bytes, 0, count);
}
out.flush();
out.close();
fis.close();
bis.close();
socket.close();
如果有人能指出任何可以帮助我检查我应该在我的代码上做什么的方向,那将不胜感激。谢谢!
【问题讨论】:
-
为什么是 UDP,如果我可以问的话?
-
这是我的任务的一部分,它应该使用数据报
-
如果你想支持多个动作,你需要想出某种命令方案。客户端需要告诉服务器它正在尝试做什么,然后根据命令跟随某些数据。所以如果我告诉你我想列出一个目录,接下来我应该告诉你的是一个目录。祝你好运!
-
感谢您的回复!我已经有一个基本菜单,根据命令将调用客户端类上的正确方法(上传、下载等)。但是,这是否需要我在服务器端也采用其他方法?我想不是,虽然我只是问,因为我对任何涉及互联网通信的 java 真的没有经验。
标签: java file udp client-server