区分socket上的接收文件

时间:2014-08-22 09:33:43

标签: c sockets file-upload file-io flags

我有关于套接字的问题。我使用套接字将数据从A传输到B,在B处理文件,然后从B向A发送响应。现在我想(ab)使用相同的套接字发送不同的文件。不应处理该文件(仅保存)。问题是如何区分这两个文件?

有没有办法解析实际的文件名,还是可以使用标志或其他东西?

一个想法是我的send方法使用fread来读取整个文件,我想当我复制一个完整的文件时,会包含文件名。但由于我必须在接收文件中使用fopen打开一个新文件,因此我必须提供一个新文件名。

2 个答案:

答案 0 :(得分:1)

我会定义一个简单的协议来描述您通过套接字发送的内容。

  1. 表示文件名长度的字节
  2. 表示文件名的字符数组
  3. 表示是否应该处理文件的字节
  4. uint32表示文件的大小
  5. 组成文件内容的字节数组
  6. 显然,您可以根据自己的需要进行调整,但是明确定义这样的内容会使传输更加健壮,并且可以非常简单地确定是否处理文件。

答案 1 :(得分:0)

首先,当您读取文件的内容时,除非您没有明确地将文件名写入数据,否则文件名不会包含在数据中。

其次,如果您通过文件名知道,在B侧,无论是否要处理,那么您可以在数据的起始处添加文件名并添加特殊标识符以指示数据的开始。这样,如果要保存文件名,您将获得文件名。

第三,除了将文件名放在数据中之外,您可以添加一个类似于标志的位,指示是否处理该文件。然后你可以阅读其余的数据。