使用java套接字传输文件时获取文件名和长度

时间:2015-03-25 13:00:56

标签: java sockets

我将使用 Java 套接字传输文件(例如:abc.jpg):

我能做什么:

  • 与另一方建立套接字连接
  • 成功发送文件内容

我想要的是什么:

  • 让其他方知道文件名(使用相同的文件名来存储文件)和文件长度(用于检查是否成功传输)。

我的想法:

  • 我可以提出的是在使用相同的套接字连接发送文件内容之前发送文件名和文件长度

问题:

  • 由于不同类型的信息(文件名,文件长度和文件内容)应该通过相同的套接字连接发送,另一方如何知道我正在传输什么?

有没有人知道如何让对方知道文件名和文件长度?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,根据你的评论,最简单的方法是创建可序列化的容器类并发送它。例如

public class FileContainer implements Serializable{

private String filename;
private Integer size;
private byte[] data;

//proper getters and setters
}

稍后,将文件读入字节数组,将其放入容器中,然后通过socket

序列化
FileContainer fc=new FileContainer();
//TODO: read file and set proper fields in fc
ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream());
out.writeObject(fc);

//and on receiving side

ObjectInputStream in=new ObjectInputStream(socket.getInputStream());
FileContainer fc=in.readObject(); // here you will need to add type casting

就是这样。

您还提到要检查数据是否正确。如果是TCP连接,则不必担心协议本身会保证数据核心性。如果出现问题,双方都会获得例外。但是在UDP通信中情况不同。