Hallo,
ich bin zur Zeit auch dran ein Netzwerkprogramm zu schreiben und bin während der Suche in dem Forum auf diesen Beitrag hier gestoßen.
Ich habe bisher auch TCPClient und TCPListener benutzt und es funktioniert soweit ganz gut.
Ich bin soweit, dass mein Programm (Server-Seite) während der Laufzeit immer einen Port abcheckt, ob neue Verbindungen eingehen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| static internal void server() { while (true) { Console.WriteLine("Function {0} start", "server()"); TcpListener listener = new TcpListener(IPAddress.Any, port); Console.WriteLine("Listening on Port {0}", port); try { listener.Start(); Console.WriteLine("Start listening..."); while (!listener.Pending()) { Console.WriteLine("No incoming requests - Waiting!"); Thread.Sleep(200); } clientSocket = listener.AcceptSocket(); Thread tacceptedSocket = new Thread(acceptedSocket); tacceptedSocket.Start(); } catch (Exception serverexc) { Console.WriteLine("Error: {0}", serverexc); } } } |
Die Konsolenausgaben könnt ihr erstmal ignorieren, da ich die nur zum testen drin hab.
Jedoch verstehe ich nicht ganz, wie das Programm jede Verbindung auf einen neuen Port umleiten sollte, da man doch nur einen Port angibt!?!?!?
Nachdem bei mir eine Verbindung erkannt wurde, wird ein neuer Thread erstellt indem dann später ein Datentransfer (Server: eigehend & Client: ausgehen) stattfinden soll.
Das ganze Programm soll im Sinne P2P laufen und stellt gleichzeitig Server und Client zur Verfügung.
Meine eigentlich Frage ist aber, wie ich per Socket dann Daten erhalte und auf Festplatte speichern kann!?!?!?
Es geht hier nicht um ein paar "strings" mit Textinhalten, sondern um Datenmengen, auch im Bereich 2GB, die von Rechner A nach Rechner B gesendet werden sollen. Sowas kann man natürlich nicht in einer Variable speichern.
Da ich gesehen habe, dass die Methode
.Receive(); daten in ein byte[] Array speichern will, was eine bestimmte größe hat, weiß ich leider nicht genau, wie ich das zusammen mit der Klasse System.IO auf meinem rechner bekomme!?
Kann mir da vielleicht auch jemand kurz helfen das zu realisieren?
Das ganze muss ja irgendwie über eine while-Schleife zu realisieren sein, so in etwa:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| byte[] bytearray = new byte[Size]; int size = 0; while ((size = socket.Receive(bytearray, SocketFlags.None) > 0) { } |
ist der Ansatz richtig oder geht das anders?
Ich danke euch schonmal