【问题标题】:TcpClient / TcpListener filenameTcpClient / TcpListener 文件名
【发布时间】:2013-04-09 16:57:07
【问题描述】:
我正在根据我找到的示例 here 实现一个简单的文件发送方法,但是我无法找到任何关于如何在发送实际字节之前发送文件名和/或类型的参考。我见过的所有例子,都是在接收端手动设置文件名。
到目前为止,我唯一的想法是将其作为字符串单独发送,但我只是好奇我是否错过了一些更简单/方便的方法。那么,TcpClient/TcpListener 中是否有一种方法可以发送我错过的文件名?有没有我没有遇到过的通用方法?
如果需要,我也可以发布代码。
【问题讨论】:
标签:
c#
tcpclient
tcplistener
【解决方案1】:
你可以发送的只是“数据”,一个扁平的字节数组。因此,您需要使用某种类型的协议,发送者和侦听器都适用于数据。
您可以说您要传输“两个数据块”,在这种情况下您可以:
- 发送每个块的大小,后面跟着实际数据,后面跟着下一个块大小和数据,或者:
- 使用分隔符(仅当实际数据不包含该分隔符时才有效(即使这样也有解决方案,例如在数据中转义分隔符))
您也可以格式化数据,例如通过发送一个 Xml 文档,其中包含:
<myData>
<filename>txt.txt</filename>
<data>F83BA=</data>
</myData>
问题当然是文件内容必须编码才能验证Xml(例如base64编码)。