Какой лучший способ отправить файл по сети с помощью C #? - PullRequest
6 голосов
/ 18 сентября 2008

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

Ответы [ 6 ]

3 голосов
/ 18 сентября 2008

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

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

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

Хороший учебник по TCP Client / Server в C #:

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

2 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

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

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

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...