大家好,我正在做一个学校项目,我需要建立一个 TCP 服务器/客户端,使用TCP协议将文件从客户端传输到服务器。
我已经知道如何让 TCP 服务器和客户端发送消息和对象。
我需要的是:
我该如何解决这个问题?如果我从用户硬盘驱动器获取文件,我如何将该文件转换为字节,然后发送到服务器。 服务器如何知道它是一个文件并用原始名称保存文件?
感谢名单
答案 0 :(得分:1)
您需要做的第一件事是定义协议。例如......
现在,您必须为客户端进行编码。您可以使用FileInputStream读取文件的内容。然后,使用套接字上的OutputBuffer通过套接字发送元数据和内容。
最后,服务器。无论何时客户端连接,您都知道前两行是什么。因此,请在第一行中读取并根据文件名创建一个新文件。然后,在第二行阅读。最后,来自套接字的read X number of bytes和write those bytes to the file,其中X是第二行的字节大小。
通过使用第二行,您知道何时完成套接字。此外,如果插座死亡或阻塞 - 无论出于何种原因 - 您知道转移有问题并且可以中止。
答案 1 :(得分:-1)
使用ObjectOutputStream通过套接字和File.getName发送文件实例以获取文件名。文件为Serializable,因此您无需将实例转换为字节。有关更多帮助,请参阅this示例。
//client
String filename = "";
File f = new File(filename);
Socket sock = new Socket();
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.writeObject( f );
//server
ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
File f = (File)ois.readObject();
String filename = f.getName();