【问题标题】:Send File via socket in java [duplicate]在java中通过套接字发送文件[重复]
【发布时间】:2015-10-01 14:03:47
【问题描述】:

我有一个客户端和一个服务器。服务器维护一个文件,客户端对其进行请求。 所以,我要做的是

File CONFIGURATION_FILE=new File(configuration.doc);
System.out.println (CONFIGURATION_FILE.exist()); //return true

in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
oos=new ObjectOutputStream(socket.getOutputStream());

String line;
while ((line=in.readLine())!=null) {

  if (line.equals("configuration file"))
        oos.writeObject(CONFIGURATION_FILE);
        oos.flush();
  }
}

当我在客户端收到文件时,它会引发 IOException。如果我在创建文件时传递绝对路径,程序就可以工作(客户端和服务器目前在同一台机器上,所以我认为通过套接字传递的是对路径的引用,客户端和服务器都是可以看到)。我的问题是:是否可以直接通过套接字通道将文件作为对象发送,或者我必须将其转换为字节数组并发送该数组?提前谢谢你

【问题讨论】:

  • 文件对象是一个"abstract representation of file and directory pathnames" (javadoc)。所以不,你不能只通过套接字发送它。您可以使用 NIO 来简化流的处理。
  • File 确实应该被称为Path,但现在修复它为时已晚。

标签: java file sockets


【解决方案1】:

您需要将其转换为字节并发送字节。例如,您的服务器可能在F:/Out.txt 中有文件,因此如果您将实际文件对象发送给客户端,客户端可能根本没有F: 驱动器。此外,File 类使用了很多本地方法。序列化和反序列化绝不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多