Какой наилучший способ отправить файл по сети с использованием C #?

StackOverflow https://stackoverflow.com/questions/95235

Вопрос

Кто-нибудь может указать мне на руководство по наилучшему способу открытия соединения с клиента на сервер, чтения в двоичном файле и надежной отправки его содержимого по сетевому соединению?Еще лучше, есть ли библиотека с открытым исходным кодом, которая уже делает это, на которую я мог бы сослаться?

Это было полезно?

Решение

Вам следует изучить двоичную сериализацию и отправку ее через TCP-сокет.

Хорошее объяснение различных типов сериализации:

http://www.dotnetspider.com/resources/408-XML-serialization-Binary-serialization.aspx

Хороший учебник по TCP-клиенту / Серверу на C#:

http://www.codeproject.com/KB/IP/tcpclientserver.aspx

Другие советы

Это зависит от того, что вы подразумеваете под сетью - если вы копируете в локальной сети, вы можете просто использовать операции копирования файлов внутри System.IO.Если вы хотите отправлять сообщения на удаленные серверы, я делаю это с помощью веб-служб.Я сжимаю массивы байтов, пересылаю их и распаковываю на удаленной стороне.Массив байтов очень легко записать обратно на диск с помощью потоков.

Я знаю, что некоторые люди предпочитают базовые 64 строки вместо байта [].не уверен, что это имеет значение.

Как насчет использования HTTP или FTP?Они были как бы созданы для этого.

Алекс

В зависимости от того, куда вы отправляете файл, вы можете захотеть взглянуть на Веб-клиент.UploadFileAsync и Веб-клиент.Загружаемый файл.

Я бы не стал использовать HTTP или FTP, для одного файла это слишком большие накладные расходы и слишком много кода, особенно учитывая, что простой TCP-сервер почти уже создан для вас на C #.

Сокеты могут быть лучшим маршрутом, если вам просто нужно сделать это по сети.Если вы используете TCP, вы получаете надежность связи, но оказываете влияние на скорость.Если вам нужна более высокая производительность, вы могли бы попробовать использовать UDP вместо этого.Но недостатком UDP является то, что доставка пакетов и порядок не гарантированы, поэтому вам нужно будет написать все это самостоятельно.

Если вам необходимо передавать файлы через Интернет (программно, и если вы не можете использовать FTP), то подход веб-службы через MTOM ( МТОМ ) может соответствовать вашим потребностям.

Если вы создаете поверх Windows Server 2003 R2, Windows Vista или Windows Server 2008 и выполняете передачу данных по внутренней сети, другим вариантом является использование нового Дистанционное Дифференциальное Сжатие особенность.Это не только действительно хорошо справляется со сжатием файла для минимизации сетевого трафика, но и используется непосредственно при репликации DFS.Недостатком (как разработчика .NET) является то, что это технология COM +.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top