Приложение для передачи файлов в VB.Net UDP против TCP и - PullRequest
4 голосов
/ 14 января 2011

Я занимаюсь разработкой приложения для передачи файлов в VB.Net

Размеры файлов различаются, но могут достигать 10+ ГБ.

Я уже создаю приложение чата в качестве теста.

На стороне клиента я запускаю этот код для подключения к серверу.

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 голосов
/ 23 января 2011

Передача файлов: Да, вы можете очень хорошо использовать надежный сетевой поток для передачи файлов. Ну хотя бы данные тех файлов. Вы должны выполнить управление файловой системой (создание файла назначения в нужной папке и т. Д.) Самостоятельно.

TCP / UDP. Поскольку для передачи больших объемов данных через Интернет требуется надежность и управление потоком, возможно, вы захотите использовать протокол TCP. Также не помешают другие функции TCP, такие как доставка по заказу и обнаружение ошибок. Вы, вероятно, в конечном итоге реализовали бы все это сами, если бы использовали UDP, тратя впустую много времени.

Брандмауэр: не должно быть проблем с брандмауэрами на стороне клиента вашего приложения, если они действительно очень строгие и допускают только исходящие HTTP-соединения. Но порт сервера должен быть доступен из Интернета, то есть вы хотите, чтобы ваша серверная сеть была настроена таким образом, чтобы входящие запросы на подключение к вашему общедоступному IP-адресу и выбранному вами порту были перенаправлены на выбранный порт на вашем сервере. Посмотрите "перенаправление портов" или "порт NAT" для получения дополнительной информации. Обойти межсетевые экраны и NAT с обеих сторон действительно намного сложнее, если не невозможно. Не пытайся.

1 голос
/ 22 мая 2011

Для передачи очень больших файлов, как у вас, вам нужно будет разбить их на маленькие куски. Это поможет вам настроить приложение, которое может возобновить работу после сетевой ошибки. Именно по этой причине, как и многие другие, вы также хотите выбрать TCP для своего транспортного протокола. UDP может быть быстрее, чем TCP, но в нем нет обнаружения и исправления ошибок, которые вам понадобятся для безопасной передачи данных.

Вот статья на C # о том, как передавать большие файлы с точки зрения клиента и сервера. Если это то, что вы ищете, вам просто нужно перевести код на VB.NET (что переводчик может сделать автоматически для вас).

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

По сути, код преобразует файл в байтовый массив и затем отправляет его через сеть / Интернет. Так как вы можете выбрать порт, который вы используете, у вас не будет проблем с брандмауэрами, когда вы размещаете это. На стороне клиента, когда клиент инициализирует соединение, это будет исходящая инициализация, поэтому он без проблем выйдет из сети.

0 голосов
/ 26 мая 2011

Я предполагаю, что вы используете Windows, поэтому просто используйте БИТЫ

Доступна хорошая оболочка .net sharpbits

...