Jedi
PROGrAMmER
|
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!
|
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
|
Interessant wäre auch was nicht geht. Kommen die Packete nicht an, oder fehlerhaft, ...
|
watchout
Legendundead
|
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
|
*arg* das kommt dabei raus, wenn ma zuviel gleichzeitig macht 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
Legendundead
|
*arg* das kommt dabei raus, wenn ma zuviel gleichzeitig macht
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!
|
|
FMFlash
tranceCoder
|
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!
|
bleibt die frage: warum nicht tcp? da brauchst du dich ums aufteilen, sequenzieren, bestätigen, zusammensetzen usw gar nicht mehr kümmern.
|
that
ModeratorHoffnungsloser Optimist
|
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!
|
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
|
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!
|
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
|
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!
|
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. 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
|