TCP Chat Dateien schicken

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von ftzdOp.

    Radinator schrieb:

    Wie genau stellst du das in .NET an?

    ErfinderDesRades schrieb:

    Im Sender lese ich sie aus einem FileStream aus und schreib sie in den Networkstream - im Empfänger lese ich sie aus dem Networkstream, und schreib sie in einen Filestream
    Ich sehe das als absolut valide Antwort auf deine Frage an. Wenn du expliziten Code willst, hättest du das spezifizieren müssen, denn so wie deine Frage gestellt ist, lässt sie einfach zu viel Spielraum in dem zu was du als Antwort erhalten könntest. Und in genau diesen Spielraum fällt die Antwort von EDR, da sie die Frage des "Wie stellst du dies und jenes an", mit "Du tust dies und das" beantwortet. Du hättest schon fragen müssen "Kannst du mir anhand eines Bauplanes erklären wie dies und jenes Funktioniert?"

    Bitte erst dein exaktes Bedürfnis verstehen, verbalisieren, und dann erst fragen.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „EaranMaleasi“ ()

    @Radinator was glaubst du warum ich gesagt habe Paketgröße > 1500 ? ich hab mir die nicht einfach ausgedacht, ob dus glaubst oder nicht ich hab schonmal von MTU gehört :D
    Es geht dabei darum, dass der Verwaltungsaufwand von Daten zeit kostet, jeder extra Call kostet Zeit, Puffergröße bei lokalen Operationen darf ruhig > 1 MB sein, jedoch dürfte das bei Übertragungen über LAN nie der Fall sein, aber das braucht uns nicht zu interessieren wird ja vom OS gemanaged. Viel wichtiger ist, dass wenn ich viele Kleine Pakete hätte, dann schmeiß ich die lieber Lokal zusammen solange < 1500 Bytes, denn genau so viel passen in den PayLoad und ich hab keinen unnötigen Overhead.

    Edit:
    @ErfinderDesRades
    Und ich sag es noch einmal:
    Nehmen wir an Ich Schicke User1 eine Datei von mir aus 1 GB, dauert nen paar Minuten, dann will ich mit User2 schreiben ohh nein, das geht ja gar nicht über den gleichen NetworkStream, wenn ich nicht in Pakete Segmentiere. Ach du willst eine neue Verbindung aufmachen. Wie viel Ports haben wir denn zur Verfügung 2^16(- nen paar, die man nicht einfach verwenden kann). Da biste dann wenn du Gewährleisten willst, dass jeder an jeden gleichzeitig Dateien senden kannst auf Serverseite sehr schnell ausgelastet. Natürlich ist das nur eine Annahme, aber ein Problem, das anders einfacher zu Lösen ist, vorallem da das Segmentieren weniger Verwaltungsaufwand ist als das verwalten von so vielen Verbindungen und es in Verbindung mit einem richtigen Übertragungsprotokoll sowieso einfach ist.
    Abgesehen davon kenne ich keinen Chat der das nicht macht(Könnte sein, dass Skype das nicht macht, da wir hier über UDP-Hole punching gehen, aber selbst da würde es dennoch Sinn ergeben).
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jvbsl“ ()

    @EaranMaleasi:

    EaranMaleasi schrieb:

    Wenn du expliziten Code willst, hättest du das spezifizieren müssen,
    Gut, dann hier meine Frage an @EDR:

    EaranMaleasi schrieb:

    Wie genau stellst du das in .NET an?
    Welchen Code verwendest du dazu?

    Ich dachte wirklich meine Frage, mit welchen Mitteln das Ziel "Dateien über eine TCP Verbindung zu übertragen" von @EDR erreicht wird, sei spezifisch genug gestellt.
    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ja, aber meine Antwort wird nichts neues ergeben:
    • Mit einem TcpClient, mit dem der Client sich mit dem Server verbindet
    • Mit einem TcpListener, der im Server Verbindungsanfragen entgegennimmt, und dann einen - mit dem Anfrager verbundenen - TcpClient erstellt.
    • Mit den beiden Networkstreams - den einen, der im Client vom TcpClient abgerufen wird, und dem anderen, der im Server von dessen TcpClient abgerufen wird
    Du kannst dir auch das in post#6 verlinkte Tut antun, wenndes im (lauffähigen) Detail wissen willst.
    Da ist allerdings schon allerhand aufgebaut auf die simple Grund-schleife, mit der man eben eine Datei transportiert:

    VB.NET-Quellcode

    1. 'src As Networkstream, dest As FileStream
    2. Dim buf(1023) As Byte
    3. Dim read = buf.Length
    4. While read = buf.Length
    5. read = src.Read(buf, 0, read)
    6. dest.Write(buf, 0, read)
    7. End While

    Radinator schrieb:

    Mal angenommen du willst über eine TCP Verbindung eine Musikdatei verschicken. Wie genau stellst du das in .NET an? (Sprache ist mir jetzt erst mal egal - kann sowohl C# als auch VB.NET sein :D)


    Netz-Admin Senf dazu: Musik Stream - im Sinne des Streaming beim User - bitte per UDP :sleeping:
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)