"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

solved(??): c#: datenpakete >1kb senden/empfangen

Jedi 31.03.2003 - 13:11 3230 24
Posts

Jedi

PROGrAMmER
Avatar
Registered: May 2002
Location: linz
Posts: 1871
netzwerkspezialisten hergehört

folgendes problem:

es gibt ein programm zum versenden/empfangen von dateien über netzwerke.
lokal auf dem rechner läuft der transfer problemlos.
wenns aber darum geht, dateien über netze zu schicken, müssen diese erst auf 1kb große segmente gesplittet werden.

realisiert ist das ganze unter c#.

irgenwelche ideen?
Bearbeitet von Jedi am 03.04.2003, 19:00

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
und wie hast du es realisiert ? udp? oder mußt du auch aus anderen gründen auf die MTU im Ethernet rücksicht nehmen ? (zb weil die firewall/nat keine fragmentierung zulassen)

Yeahman

OC Addicted
Avatar
Registered: Jul 2001
Location: on top of my sol..
Posts: 1775
Interessant wäre auch was nicht geht. Kommen die Packete nicht an, oder fehlerhaft, ...

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Jedi
netzwerkspezialisten hergehört

folgendes problem:

es gibt ein programm zum versenden/empfangen von dateien über netzwerke.
lokal auf dem rechner läuft der transfer problemlos.
wenns aber darum geht, dateien über netze zu schicken, müssen diese erst auf 1kb große segmente gesplittet werden.

realisiert ist das ganze unter c#.

irgenwelche ideen?
rofl - geile fragestellung

(scnr)

Jedi

PROGrAMmER
Avatar
Registered: May 2002
Location: linz
Posts: 1871
*arg*
das kommt dabei raus, wenn ma zuviel gleichzeitig macht :D :bash:

ok, nochmal und jetzt hoffentlich verständlicher:

senden von datenpaketen geht nur bis maximal 1kb, da sonst der empfänger eine invalid package-fehlermeldung (oder so in der richtung) bekommt. (bin grad ned am entsprechenden rechner).
leider sollen auch größere dateien (>1kb) geschickt werden können und das aufsplitten und zusammensetzen (am zielrechner) braucht unnötige rechenleistung.
merkwürdig an der ganzen sache ist, dass lokal (also sender und empfängerprog auf einem rechner) alles wunderbar geht. übers netzwerk gibts eben oben beschriebenes problem.

hatte schon wer a ähnliches problem oder eine ahnung, was das problem sein könnte?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Jedi
*arg*
das kommt dabei raus, wenn ma zuviel gleichzeitig macht :D :bash:

ok, nochmal und jetzt hoffentlich verständlicher:

senden von datenpaketen geht nur bis maximal 1kb, da sonst der empfänger eine invalid package-fehlermeldung (oder so in der richtung) bekommt. (bin grad ned am entsprechenden rechner).
leider sollen auch größere dateien (>1kb) geschickt werden können und das aufsplitten und zusammensetzen (am zielrechner) braucht unnötige rechenleistung.
merkwürdig an der ganzen sache ist, dass lokal (also sender und empfängerprog auf einem rechner) alles wunderbar geht. übers netzwerk gibts eben oben beschriebenes problem.

hatte schon wer a ähnliches problem oder eine ahnung, was das problem sein könnte?
und mit welchem protokoll verschickst du's?

schonmal probiert an andere rechner zu schicken?

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
http://www.ethereal.com/download.html
downloaden und nachschauen, was am traffic wirklich nicht hinhaut.

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von Jedi
senden von datenpaketen geht nur bis maximal 1kb, da sonst der empfänger eine invalid package-fehlermeldung (oder so in der richtung) bekommt. (bin grad ned am entsprechenden rechner).
leider sollen auch größere dateien (>1kb) geschickt werden können und das aufsplitten und zusammensetzen (am zielrechner) braucht unnötige rechenleistung.
merkwürdig an der ganzen sache ist, dass lokal (also sender und empfängerprog auf einem rechner) alles wunderbar geht. übers netzwerk gibts eben oben beschriebenes problem.

hatte schon wer a ähnliches problem oder eine ahnung, was das problem sein könnte?

ich hatte schon ein ähnliches problem, allerdings gings dabei um unerklärliche programmfehler bei zu großer (ca >10kb) paketgröße. aus bequemlichkeit hab ichs dann - weils ohnehin nicht auf effizienz in sachen übertragungsgeschwindigkeit ankam - auf 1kb/paket belassen.

allerdings wirst du kein glück haben wenn du eine 1 mb große datei mit einem paket schicken willst, aus dem einfachen grund das die maximale paketgröße eines IP pakets 64kb beträgt.

es wird dir nichts anderes übrig bleiben als die zu verschickende datei stück für stück zu lesen, zu schicken, zu lesen ... usw, während die zielanwendung zur gleichen zeit empfängt, schreibt, empfängt, ... so lange bis die sendende anwendung signalisiert das das ende der datei erreicht und die übertragung abgeschlossen wurde.

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
bleibt die frage: warum nicht tcp? da brauchst du dich ums aufteilen, sequenzieren, bestätigen, zusammensetzen usw gar nicht mehr kümmern.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von FMFlash
allerdings wirst du kein glück haben wenn du eine 1 mb große datei mit einem paket schicken willst, aus dem einfachen grund das die maximale paketgröße eines IP pakets 64kb beträgt.

Das wird sowieso vom Betriebssystem aufgeteilt, bei Ethernet z.B. auf ca. 1,5 kB Stücke.

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
bevor wir weiterspekulieren, sollte uns unser Jedi-Ritter mal über das verwendete Protokoll aufklären. (evt wäre auch ein code-stück interessant)

bei tcp braucht man sich zb überhaupt keine gedanken machen, bei udp nur über die maximale IP-datagram größe. zusätzliche constrains wie die Ethernet MTU kommen nur in bestimmten fällen hinzu. erst bei RAW-Sockets muß man große Rücksicht auf die Netzwerkinfrastruktur nehmen.

vielleicht ist es was vollkommen anderes ?
Bearbeitet von atrox am 01.04.2003, 19:29 (typo)

Jedi

PROGrAMmER
Avatar
Registered: May 2002
Location: linz
Posts: 1871
verschickt wird über sockets (tcp/ip)

wenn der server daten an client weiter leitet, bekommt der 1. client die daten korrekt, der 2. jedoch nicht ....
es dürfte jedoch am servercode liegen.

es wär schon toll, wenn zumindest 5kb segmente verschickt werden könnten, denn dadurch wär die performance schon mal einiges höher.

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
nachdem tcp-sockets stream orientiert sind, sollten blockgrößen eigentlich nicht von belang sein. der fehler ist also sehr wahrscheinlich in einem der beiden programme an den endpunkten der verbindung.

btw.. was meinst du mit 1ter & 2ter client?

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
ich nehme an er meint multiple verbindungen auf einem tcp socket ;)
in dem bereich ist tcp imho nicht mehr sehr praktisch zu handhaben, da bevorzuge ich persönlich doch udp.

@atrox: es ist (leider) sehr wohl von belang wie groß die teilstücke des files sind die man auf einmal verschickt (fehlerhafter code?).
könntest du vielleicht code von einem selbst gebauten file transfer bei dem die teilgröße keine rolle spielt posten? dann wüsste ich wenigstens was ich damals falsch gemacht hab und das problem vom jedi würde sich vielleicht auch lösen :)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat von FMFlash
Zitat von foKer
Vorschriftsschreiber?
das hat er aber leider nicht erwähnt. ob die design-entscheidung vorteilhaft ist/war läßt sich ohne kenntnis des umfeldes nicht beurteilen.

Zitat
es ist (leider) sehr wohl von belang wie groß die teilstücke des files sind die man auf einmal verschickt (fehlerhafter code?).
für den socket ist es egal, das program muß es halt richtig auseinandernehmen bzw zusammensetzen, aber das hab ich eh schon geschrieben. bei tcp kann der sender die daten in blöcken zu n bytes übergeben, und der empfänger zu m bytes lesen, ohne daß irgendeine spezielle beziehung zwischen n und m herschen muß.

aber ich bin mir nicht sicher, ob jedi tatsächlich reine tcp-streams verwendet, er schreibt was von "invalid packet"-fehlermeldungen, etwas daß tcp auf user-seite eigentlich gar nicht kennt.

hab jedi schon mal gebeten, die entscheidenden code stellen zu posten - auch wenn ich kein c# experte bin, ließe sich überprüfen, obs am blocking liegt, oder wo anders.

hier ist zb ein c# tcp sample code:
http://www.c-sharpcorner.com/Networ...ramPart2RVS.asp
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz