VB.Net中的文件传输应用:UDP vs TCP

4
我正在使用VB.Net开发一个文件传输应用程序。
文件的大小不尽相同,但可能达到10GB以上。
我已经创建了一个聊天应用程序作为测试。
在客户端,我运行以下代码连接到服务器。
Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim serverStream As NetworkStream
clientSocket.Connect("127.0.0.1", 80)

我也可以用这个来传输文件吗?

我希望这个应用程序可以通过防火墙等工具正常工作。

因此,我认为需要将客户端的出站数据发送到80号端口。在服务器上,我希望能够在另一个端口(例如8888)接收数据。这种情况是否可行?

最后一个问题是,我应该使用TCP还是UDP协议来实现这个目的。

抱歉一次提出三个问题 :)

感谢您的帮助。

3个回答

6

传输文件:您可以使用可靠的网络流传输文件。至少是这些文件的数据。您需要自己进行文件系统管理(在正确的文件夹中创建目标文件等)。

TCP/UDP:由于您需要在互联网上传输大块数据的可靠性和流量控制,因此您可能希望选择TCP。此外,TCP的其他功能(如有序交付和错误检测)也不会有害。如果使用UDP,您可能最终会浪费很多时间来实现所有这些功能。

防火墙:除非客户端的防火墙非常严格并且只允许出站HTTP连接,否则应用程序的客户端方面不应该存在问题。但是,服务器端口必须可以从互联网访问,也就是说,您希望将公共IP和所选端口的入站连接请求转发到服务器上的所选端口,因此您需要配置服务器端网络。查找更多信息,请搜索“端口转发”或“端口NAT”。如果尝试绕过双方的防火墙和NAT,这确实要困难得多,甚至是不可能的。不要尝试。


6
+1;但我认为强烈推荐使用TCP的建议更为合适。对于文件传输,TCP是唯一正确的选择。 - Matt Ball
这是针对企业环境的,因此可能只允许使用HTTP。考虑到企业防火墙/代理。非常感谢迄今为止的回答 :) 我可以在服务器端打开端口。目前还有一个运行中的Web服务(端口80)。 - PeeHaa

1
为了传输像你所拥有的极大文件,你需要将它们分成小块。这将帮助您设置一个可以在网络错误后恢复的应用程序。出于这个原因以及其他很多原因,您还想选择TCP作为传输协议。UDP可能比TCP快,但它没有您将需要的错误检测和校正,以便安全地传输数据。
这是一篇关于如何从客户端和服务器角度传输大文件的C#文章。如果这就是您想要的,您只需要将代码翻译成VB.NET(可以由转换器自动完成)。

http://codetechnic.blogspot.com/2009/02/sending-large-files-over-tcpip.html

基本上,该代码将文件转换为字节数组,然后通过网络/互联网发送。由于您可以选择使用的端口,因此在托管此代码时不会遇到防火墙问题。在客户端,当客户端初始化连接时,它将是一个出站初始化,因此它将无任何问题地离开网络。


0

我假设你正在使用Windows,所以只需使用BITS即可。

有一个不错的.net封装程序sharpbits可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接