2011-01-14 7 views
4

Ich entwickle eine Dateitransfer App in VB.NetFiletransfer app in VB.Net UDP vs TCP und

Die Größen der Dateien variieren, kann aber GB mit bis zu 10+.

Ich habe bereits eine Chat-App als Test erstellt.

Auf der Clientseite diesen Code ausführen, um eine Verbindung zum Server herzustellen.

Dim clientSocket As New System.Net.Sockets.TcpClient() 
Dim serverStream As NetworkStream 
clientSocket.Connect("127.0.0.1", 80) 

Kann ich dies auch verwenden, um Dateien zu übertragen?

Ich möchte die App durch eine Firewall und Zeug funktionieren.

Also ich denke, ich brauche die ausgehenden Daten auf dem Client über Port 80 zu gehen. Auf dem Server möchte ich in der Lage sein, die Daten auf einem anderen Port (z. B. 8888) zu erhalten. Ist das möglich?

Und letzte Frage ist. Welches Protokoll sollte ich für diesen Zweck TCP oder UDP verwenden.

Sorry für die drei-in-one Frage :)

Danke, dass ich helfen.

Antwort

6

Transfer-Dateien: Ja, Sie können sehr gut einen zuverlässigen Netzwerk-Stream verwenden, um Dateien zu übertragen. Nun, zumindest die Daten dieser Dateien. Sie müssen die Dateisystemverwaltung (Erstellen der Zieldatei im richtigen Ordner usw.) selbst vornehmen.

TCP/UDP: Da Sie Zuverlässigkeit und Flusskontrolle benötigen, um große Datenmengen über das Internet zu übertragen, sollten Sie TCP verwenden. Auch die anderen Eigenschaften von TCP, wie z. B. In-Order-Lieferung und Fehlererkennung, werden nicht schaden. Sie würden wahrscheinlich alle selbst implementieren, wenn Sie UDP verwenden, verschwenden viel Zeit.

Firewall: Es sollte auf der Client-Seite Ihrer Anwendung kein Problem mit Firewalls geben, es sei denn, sie sind wirklich sehr streng und erlauben nur ausgehende HTTP-Verbindungen. Der Server-Port muss jedoch über das Internet erreichbar sein, dh Sie möchten, dass Ihr serverseitiges Netzwerk so konfiguriert ist, dass eingehende Verbindungsanforderungen an Ihre öffentliche IP-Adresse und Ihr gewählter Port an den ausgewählten Port auf Ihrem Server weitergeleitet werden. Weitere Informationen finden Sie unter "Portweiterleitung" oder "Port-NAT". Das Umgehen von Firewalls und NATs auf beiden Seiten ist wirklich viel schwieriger, wenn nicht gar unmöglich. Versuche es nicht.

+6

+1; aber ich denke, dass die Empfehlung, TCP zu verwenden, viel stärker sein sollte. Für die Dateiübertragung ist TCP ** die ** richtige Antwort. –

+0

Es ist für ein Unternehmen env. daher ist es möglich, dass nur HTTP erlaubt ist. Denken Sie Corporate Firewall/Proxy. +1 für die Antwort bis jetzt :) Ich bin jedoch in der Lage, Ports auf der Serverseite zu öffnen. Momentan läuft auch ein Webservice (Port 80). – PeeHaa

1

Um extrem große Dateien wie Sie zu übertragen, müssen Sie sie in kleine Stücke aufteilen. Dadurch können Sie eine Anwendung einrichten, die nach einem Netzwerkfehler fortgesetzt werden kann. Aus diesem Grund möchten Sie, wie viele andere auch, TCP für Ihr Transportprotokoll auswählen. UDP ist zwar schneller als TCP, verfügt jedoch nicht über die Fehlererkennung und -korrektur, die Sie für eine sichere Übertragung von Daten benötigen.

Hier ist ein C# -Artikel, wie große Dateien aus der Client- und Serverperspektive übertragen werden können. Wenn Sie das suchen, müssen Sie nur den Code in VB.NET übersetzen (was ein Übersetzer automatisch für Sie tun kann).

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

Grundsätzlich wandelt der Code die Datei über auf ein Byte-Array und sendet sie dann über das Netzwerk/Internet. Da Sie den von Ihnen verwendeten Port auswählen können, haben Sie beim Hosten keine Probleme mit Firewalls. Wenn der Client auf der Client-Seite die Verbindung initialisiert, handelt es sich um eine ausgehende Initialisierung, so dass es ohne Probleme aus dem Netzwerk austritt.

+0

Sieht so aus, als hätte ich etwas Umschreiben zu tun :) Danke. – PeeHaa

0

Ich nehme an, Sie auf Windows verfügbar sind, so benutzen Sie einfach BITS

Es gibt einen schönen NET-Wrapper verfügbar sharpbits