Czy ktoś może wskazać mi samouczek o najlepszym sposobie otwierania połączenia od klienta do serwera, czytać w pliku binarnym i wysyłać jego zawartość niezawodnie przez połączenie sieciowe? Co więcej, czy istnieje biblioteka open source, która już to robi, do której mogę się odwołać?Jaki jest najlepszy sposób na przesłanie pliku przez sieć przy użyciu C#?
Odpowiedz
Powinieneś sprawdzić serializację binarną i wysłać ją przez gniazdo TCP.
dobre wytłumaczenie na różnych typach serializacji:
http://www.dotnetspider.com/resources/408-XML-serialization-Binary-serialization.aspx
Dobry grunt na TCP Client/Server w C#:
można utworzyć klienta TCP i serwer i wysyłać wiadomości przez TCP. Jest dość trywialny w języku C#.
tutaj jest przykład prostego serwera TCP:
http://www.goldb.org/goldblog/2007/07/27/CSimpleTCPServer.aspx
Jak o użyciu protokołu HTTP lub FTP? Byli do tego stworzeni.
Alex
zależności od tego, gdzie chcesz wysłać plik, może chcesz przyjrzeć WebClient.UploadFileAsync i WebClient.UploadFile.
Nie używałbym HTTP ani FTP, dla pojedynczego pliku jest zbyt dużo narzutów i za dużo do kodu, szczególnie mając prosty serwer TCP prawie już stworzony dla ciebie w C#.
To zależy, co masz na myśli przez sieć - jeśli kopiujesz w sieci lokalnej, możesz po prostu użyć operacji kopiowania plików w System.IO. Jeśli chcesz wysyłać na zdalne serwery, robię to za pomocą usług internetowych. Kompresuję tablice bajtów i wysyłam je i rozpakowuję po stronie zdalnej. Tablica bajtów jest bardzo łatwa do zapisania na dysku za pomocą strumieni.
Wiem, że niektórzy ludzie wolą ciągi bazowe 64 zamiast bajtów []. nie jestem pewien, czy to ma znaczenie.
Gniazda mogą być najlepsza droga, jeśli jesteś po prostu trzeba to zrobić w sieci. Jeśli korzystasz z protokołu TCP, uzyskujesz niezawodność komunikacji, ale wpływ na szybkość. Jeśli potrzebujesz wyższej wydajności, możesz spróbować użyć UDP. Jednak wadą UDP jest to, że dostarczanie pakietów i ich realizacja nie są gwarantowane, więc sam musisz napisać całą tę instalację hydrauliczną.
Jeśli chcesz przesłać pliki przez Internet (programowo i jeśli nie możesz korzystać z FTP), podejście do usługi sieci Web pod numerem MTOM może spełnić Twoje potrzeby.
Jeśli budujesz na systemie Windows Server 2003 R2, Windows Vista lub Windows Server 2008 i wykonujesz wewnętrzne transfery sieciowe, inną opcją jest wykorzystanie nowej funkcji Remote Differential Compression. To nie tylko zapewnia dobrą kompresję pliku, aby zminimalizować ruch w sieci, ale jest również wykorzystywane bezpośrednio przez replikację systemu plików DFS. Downside (jako programista .NET), to technologia COM +.
Drugi link pochodzi z 2001 roku, który był stary nawet wtedy, gdy to pytanie było świeże. To nie jest samouczek i jest bardziej próbką kodu. – YetAnotherRandomUser