使用C#通过网络发送文件的最佳方法是什么?
谁能指出我关于打开从客户端到服务器的连接,读取二进制文件并通过网络连接可靠地发送其内容的最佳方法的教程?更好的是,有没有一个开源库已经可以做到这一点呢?
解决方案
我们可以制作一个TCP客户端和服务器,并通过TCP发送消息。在C#中非常简单。
这是一个简单的TCP服务器的示例:
http://www.goldb.org/goldblog/2007/07/27/CSimpleTCPServer.aspx
如何使用HTTP或者FTP?他们是为此而做的。
亚历克斯
根据将文件发送到的位置,我们可能需要查看WebClient.UploadFileAsync和WebClient.UploadFile。
我不会使用HTTP或者FTP,对于单个文件来说,它的开销太大,代码也太多,尤其是在C#中几乎已经为我们制作了一个简单的TCP服务器。
这取决于网络的含义,如果要在本地网络上进行复制,则只能使用System.IO中的文件复制操作。如果要发送到远程服务器,请使用Web服务。我压缩字节数组,然后将其发送并在远程端进行解压缩。字节数组非常容易使用流写回到磁盘。
我知道有些人更喜欢基数为64的字符串,而不是byte []。不确定是否重要。
我们应该研究二进制序列化并通过TCP套接字发送它。
关于不同类型的序列化的很好的解释:
http://www.dotnetspider.com/resources/408-XML-serialization-Binary-serialization.aspx
在C#中的TCP客户端/服务器上的良好入门:
http://www.codeproject.com/KB/IP/tcpclientserver.aspx
如果我们只需要通过网络进行操作,则套接字可能是最好的选择。如果使用TCP,则可以获得通信的可靠性,但会影响速度。如果需要更高的性能,则可以尝试使用UDP。但是UDP的缺点是不能保证数据包的传送和顺序,因此我们需要自己编写所有内容。
如果我们需要通过Web本身传输文件(以编程方式,并且不能使用FTP),那么通过MTOM进行Web服务的方法可能会满足需求。
如果要在Windows Server 2003 R2,Windows Vista或者Windows Server 2008的基础上构建并进行内部网络传输,则另一个选择是利用新的远程差分压缩功能。这不仅在压缩文件以最大程度地减少网络流量方面做得非常好,而且还直接由DFS复制使用。不利的一面(作为.NET开发人员),它是一种COM +技术。