send API Frage, Problem?!



  • Hallo,
    vorab, Ich habe diese Frage schon in anderen Foren gestellt. Keiner konnte mir bisher eine vernüftige Antwort geben.

    Zu meinem Problem:
    Ich benutze die: "send Lib wsock32.dll" API um Daten zu senden.
    Jemand sagte mir, das nur ein Datenpaket von max. 8192 Bytes gesendet werden können.
    Wenn Ich also 50 MB verschicken will, sollte ich diese 50 MB Stückweise (8192 Bytes) versenden.

    Es klappt aber auch in einem Rutsch die 50 MB zu verschicken!!!
    Meine Meinung ist, das Windows(API) es selber regelt und ich mir das stückkeln in 8192 Bytes teilen ersparen kann.
    Aber ich will natürlich, das es ohne probleme funktioniert.

    Deshalb meine Frage, muss ich das Datenpaket unbedingt stückkeln???



  • Zelby schrieb:

    Deshalb meine Frage, muss ich das Datenpaket unbedingt stückkeln???

    Nein, das erledigt Windows.

    Ich frage mich aber, wie derjenige auf genau 8192 Bytes kommt. Ein Ethernet-Frame kann größer sein, ein IP-Paket im Internet muss meist kleiner sein. 🙄



  • Habe mal mitbekommen, das bei der Winsock Version 1.1 (was so gut wie jeder hat!) die iMaxUdpDg = 65467 Bytes ist.

    Also nicht 8192 sondern 65467 Bytes.

    Da man aber viel mehr als 65467 Bytes aufeinmal senden kannst, wird Windows das 50MB Paket wohl selber in 65467 Bytes zerlegen, oder?
    Würde mich auch mal interessieren wie das alles zu statten geht.

    Ich hab mal selbst ein kleines Proggi gemacht und habe einen 5 MB grossen Anhang auf meine Mail Adresse geschickt. Hat auch funktioniert!
    Die ganzen 5MB aufeinmal in der send API gequwetscht 😃



  • iMax[bUdp[/b]Dg

    Hat wohl was mit UDP zu tun. Hier gehts aber höchstwahrscheinlich um TCP/IP.



  • ethernet-frames (jedenfalls dieses 10/100 Mbit standard ethernet) können 1500 bytes und ein paar zerquetschte gross sein. ethernet-header nicht mitgerechnet, der kommt noch davor. in die 1500..und bytes muss auch der tcp/ip-header und für die daten bleiben ca. 1460 bytes (tcp/ip header ist 40 bytes gross).

    ein ip-paket kann aber viel grösser sein. grosse ip-pakete, die nicht in einen eth-frame passen (wird oft bei udp verwendet) werden fragmentiert, wenn ip auf ethernet läuft. tcp verwendet im allgemeinen keine fragmentierung (obwohl es meiner meinung nach möglich ist) sondern da wird bei der verbindungsaufnahme abgemacht welche paktelänge verwendet wird (MSS == maximum segment size)



  • Oh........ viel Fach- Chinesisch!
    Was ich benutze weiss ich ehrlich gesagt selber nicht. Ob es nun UDP oder TcpIp ist. Wo ist eigentlich der unterschied?

    Habe ein beispiele Mailer Prgoggi gefunden und wie "Leser" es mit dem SMTP Server gemacht hat, auch gemacht.
    Funktioniert auch. Einen 6 MB grossen Anhang aufeinmal mit der send API durchgejagt. Funzte auch!
    Kann ich jetzt sicher sein, das Windows das alles selbst erledigt?

    rl



  • Zelby schrieb:

    Was ich benutze weiss ich ehrlich gesagt selber nicht. Ob es nun UDP oder TcpIp ist. Wo ist eigentlich der unterschied?

    udp ist einfaches pakete-versenden ohne bestätigung. recht unsicher dafür aber schnell. tcp ist aus anwendungssicht ein 'datenstrom'. das zerstückeln in pakete, flowcontrol, fehlererkennung, retransmissions usw. besorgt tcp 'im hintergrund'

    Zelby schrieb:

    Kann ich jetzt sicher sein, das Windows das alles selbst erledigt?

    kannste. socket 'send()' schreibt die daten in einen fifo-buffer, auf der anderen seite holt tcp sie raus und verschickt sie. brauchst dich um nichts zu kümmern (bis auf die rückgabewerte der send()/recv() funktionen)



  • OK, THX ^^ 👍


Anmelden zum Antworten