Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Tcp/ip || Udp -> Casynsocket || Csocket

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2003, 12:16 Uhr
~TAFA
Gast


Mahlzeit ,
hab da kleines (oder großes )problem,
ich hab ein programm geschrieben Server/Client anwendung (TCP/IP CAsynSocket)
Die Datenübertragung klappt wunderbar mein frage ist wie kann mann feststellen ob die daten wirklich angekommen sind(bei UDP muß mann ja logik einbauen durch Quittung oder ähnliches) oder wenn kurze Verbindungsunterbrechungen sind wie kann man feststellen ob die daten Aktuell sind und nicht (irgendwo im stack abgelegt sind) und wie kann man dessen modus feststellen (Etablished oder Listen, time_wait,time_fin, etc.)hintergrund ist der ob TCP/IP oder UDP das bessere Protocol ist und welche Klasse (CAsynSocket || CSocket) besser geignet.

viele Fragen auf einmal für jede antwort wäre ich dankbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2003, 19:04 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Wird im Netzwerk/Internet (oder zumindest mit dem Ethernet P.) nicht eine CRC Summe mitgeschickt? Also ich glaube das geht mit TCP/IP automatisch oder so.

mfg
--

Dieser Post wurde am 25.11.2003 um 19:05 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.11.2003, 09:14 Uhr
~TAFA
Gast


hi mike,
wenigstens einer der sich traut
ich meine auch das ein CRC Summe mitgeschickt wird,
aber wie kann ich denn Programm technisch die verbindungs status festsellen bei meinem Test habe ich auf der Client seite einfach den NetzKabel raus gezogen nach ca. 5 sekunden meckert client connect failed server kriegt nichts mit innerhalb diese 5 sekunden gesendete Telegramme (vom Server) werden irgendwo im stack abgelegt wenn client sich wieder innerhalb dieser zeit connected kriegt er die telegramme in einem rutsch was eigentlich nicht in ordnung ist den die telegramme sind ja eigentlich veraltet.

A) wie kann mann diese 5 Sekunden verkleinern (Time_wait,Time_Fin)

B) woher weis (Server/Client) das die gesendete daten angekomen ist
(gibed da vielleicht ein kommunikation auf unteren ebene)

Hintergrund:
Das fertige Programm soll zur Prozess Automatisierung Dienen.
(X/Y Koordinaten) Aktuelle Position der Anlage Soll ermittelt werden
und veraltete Telegramme sind eigentlich Tötlich.

Hoffe man Kann mir helfen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.11.2003, 11:04 Uhr
ao

(Operator)



Zitat:
~TAFA postete
hi mike,
wenigstens einer der sich traut


He, langsam. Wenn die Antworten spärlich kommen, kann das auch daran liegen, dass unklar ist, was du eigentlich wissen willst. Oder dass du im falschen Forum bist.

Ich verschieb dich erst mal, denn dein Problem hat mit MFC nichts zu tun, soviel zeichnet sich inzwischen ab.

Bis bald

ao

Dieser Post wurde am 26.11.2003 um 11:05 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.11.2003, 12:42 Uhr
virtual
Sexiest Bit alive
(Operator)


UDP ist nicht verbindungsorientiert und es gibt keine Garantie, daß das was Du gesendet hast, auch wirklich ankommt. Es kann auch passieren, daß es mehrfach ankommt, aber das nur nebenbei.

Wenn Du keinen trifftigen Grund hast, UDP zu verwenden, solltest Du TCP verwenden
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.11.2003, 12:44 Uhr
ao

(Operator)



Zitat:
~TAFA postete
Hintergrund:
Das fertige Programm soll zur Prozess Automatisierung Dienen.
(X/Y Koordinaten) Aktuelle Position der Anlage Soll ermittelt werden
und veraltete Telegramme sind eigentlich Tötlich.


Soll das heißen, der Server fährt die Motoren und erfasst die Istpositionen und die Regelung (d.h. Soll-Ist-Vergleich und Berechnung der Stellgröße) findet auf dem Client statt, und dazwischen liegt ein Stück Ethernet-Kabel?

Und was heißt tödlich? Tödlich für Menschen oder wird Schrott produziert oder stimmen bloß die Anzeigen nicht?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.11.2003, 14:48 Uhr
~TAFA
Gast


tach zusammen
@virtual
du hast rech UDP ist verbindunglos man muss dem Programm noch ein bischen logik einbauen aber wenn man das gemacht funkts wundebar

@ao
mit tödlich meine ich nur die visualisierung und der rest der dahinter steckt die auswertungen danach oder so.

also beim UDP mache ich so wenn ich ein telegramm verschickt habe dann erwarte ich eine Quittung in dierser Quittung kann ich feststellen
1. Telegramm ist angekommen
2. Syntax überprüfung
und vieles mehr

beim TCP
sende ein telegramm (z.B. aktuelle Status) hat die gegenseite es Bekommen JA Nein weiss ich nicht (vermutung?)
wenn telegramm verloren geht oder ein sequenz wie oft wird wiederholt
und in welchenzeiträumen kann man diesen zeit irgendwo einstellen.

wie funktioniert eigentlich LANspiele da muß man doch auch position des spielers übermittelt solange verbindung inrordnung ist würd ich sagen es klappt aber wenn sequenz verloren geht wird dann neuangefordert oder einfach ignoriert bist nächste anweisung kommt

danke für euer hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.11.2003, 09:24 Uhr
ao

(Operator)



Zitat:
~TAFA postete
also beim UDP mache ich so wenn ich ein telegramm verschickt habe dann erwarte ich eine Quittung in dierser Quittung kann ich feststellen
1. Telegramm ist angekommen
2. Syntax überprüfung
und vieles mehr


Genau. Das heißt, du setzt eine Art Ping-Pong-Protokoll auf UDP auf, mit dem du feststellen kannst: Wenn zwischen Sendung und Quittung weniger als X Millisekunden vergehen und in der Quittung das Richtige drinsteht, dann ist alles in Ordnung. Sonst nicht.


Zitat:

beim TCP
sende ein telegramm (z.B. aktuelle Status) hat die gegenseite es Bekommen JA Nein weiss ich nicht (vermutung?)
wenn telegramm verloren geht oder ein sequenz wie oft wird wiederholt
und in welchenzeiträumen kann man diesen zeit irgendwo einstellen.


TCP enthält erheblich kompliziertere Protokolle als nur Pingpong. Du kannst zum Beispiel mit einem einzigen Sendebefehl einen riesigen Block Daten verschicken lassen. TCP zerhackt ihn in Stücke, die in IP-Pakete reinpassen und schickt diese auf die Reise. Wenn Pakete verlorengehen werden sie automatisch wiederholt, N-mal im Abstand von M Millisekunden. Wenn Pakete beschädigt beim Empfänger ankommen, fordert er sie neu an. Außerdem setzt er die Pakete in der richtigen Reihenfolge wieder zusammen, so dass der Block beim Empfänger genau so auftaucht, wie der Sender ihn übernommen hat.

Alles vollautomatisch ohne dein Zutun. Aber eins weißt du genau: Du bekommst am Ende ein Success oder ein Failed.

Dieses Protokoll ist kompromisslos auf sichere Datenübertragung ausgelegt; was du einem TCP-Stack übergibst, kommt entweder richtig und vollständig an oder gar nicht. Auch wenn das unter günstigen Umständen ganz schön schnell geht: Echtzeitfähig (d.h. garantierte Übertragungszeit) ist es auf keinen Fall.


Zitat:

wie funktioniert eigentlich LANspiele da muß man doch auch position des spielers übermittelt solange verbindung inrordnung ist würd ich sagen es klappt aber wenn sequenz verloren geht wird dann neuangefordert oder einfach ignoriert bist nächste anweisung kommt



Ich vermute, LAN-Spiele haben, wenn überhaupt, ein primitives Protokoll auf UDP, so wie oben beschrieben. Vielleicht haben sie auch gar nichts, und jeder Spieler schreit einfach oft genug seine Daten ins Netz, und solange das nur selten verlorengeht, funktioniert alles.

Wenns nur um die Prozess-Visualisierung geht, würde ich sagen, UDP ist das Richtige für dich. Timeout und verfälschte Daten kannst du erkennen, und mehr brauchst du nicht. UDP ist zwar ebenfalls nicht wirklich echtzeitfähig, aber im Zeitverhalten erheblich besser kalkulierbar als TCP.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.12.2003, 09:13 Uhr
~TAFA
Gast


moin,
@ao danke für dein ausführliche erklärung,
hab wieder was dazugelernt

Zitat:
N-mal im Abstand von M Millisekunden

genau das war das problem wie groß ist N M , und ich habe es nicht verstanden warum alle TCP wollen wenns um Prozess-Visualisierung geht
ich werde aufjeden fall UDP nehmen mit etwas logik dahinter.

und habe einpaar möglichkeiten gefunden wie man TCP beeinflussst ich poste das mal vielleicht hilft das jemandem:
Winsock.h C++
getsockopt(int getsockopt (SOCKET s,int level,int optname,
char FAR* optval, int FAR* optlen );

Erklärung:
SO_BROADCAST Wird nur von UDP unterstützt

SO_DEBUG Wird nur von TCP Unterstützt. wenn Aktiviert verfolgt der Kernel für alle Pakete, die von TCP für den Socket empfangen oder verschickt wurden,alle Informationen im Ringpuffer .Unter Unix mit Programm trpt Unter Windows keine Ahnung.

SO_ACCEPTCONN
SO_DONTLINGER
SO_DONTROUTE Diese Option gibt an , das ausgehende Pakete den normalen Routing-Mechanismus des darunter liegenden Protokolls umgehen Sollen. wenn Ziel Adresse nicht im gleichen Netzwerk ist wird Fehlermeldung ausgegeben ( WSAENETUNREACH).

SO_ERROR Fehler aufgetreten returnwert ist WSAGetLastError

SO_KEEPALIVE wenn Gesetzt und über den Socket innerhalb 2 Stunden in keiner der Beiden Richtungen Daten gesendet wurden ,Sendet TCP automatisch ein Keepalive oder Lebenszeichen an den Peer. Diese Sondierung ist ein TCP Segment auf das der Peer Antworten muss.
Möglichkeit 1:
Der Peer antwortet mit ACK alles OK
Möglichkeit 2:
Der Peer antwortet mit RST das Peer Rechner ist zusammengebrochen Socket wird geschlossen FM ist WSAECONNRESET
Möglichkeit 3:
Der Peer antwortet gar nicht es wird versucht im abstand von 75 Sekunden erneut zu senden wenn innerhalb von 11 Minuten und 15 Sekunden kein antwort kommt wird Socket Geschlossen und FM ist WSAETIMDOUT

SO_LINGER Diese Option gibt an wie OnClose Funktion arbeitet nur TCP
struct LINGER { int l_onoff /*o=an 1=aus*/ int l_linger /*linger_zeit in sekunden*/}
Möglichkeit 1: l_onoff =0 && l_linger = 0 Standart
es wird versucht Inhalte des Sockets an das ende zu verschicken (TIME_WAIT Status)
Möglichkeit 2: l_onoff = 1 && l_linger = 0
Verbindungsstatus wird auf CLOSE gesetzt RST wird gesendet (KEIN TIME_WAIT Status)
Möglichkeit 3: l_onoff=1 && l_linger!=0
es wird versucht solange l_linger zeit abläuft Sendepuffer zur versenden wenn l_linger abgelaufen ist, wenn noch Daten vorhanden
FM WSAEWOULDBLOCK

SO_OOBINLINE wenn diese Option gesetzt ist werden Out-Of-Band Daten in den Normalen Warteschlange eingefügt dann kann man nicht den Flag MSG_OOB einsetzen

SO_RCVBUF Bei TCP ist der verfügbare Platz im Emfangspuffer des Sockets das Fenster, das TCP dem anderen ende bekannt gibt. Der Empfangspuffer des TCP-Sockets kann nicht zum überlauf gebracht werden, da es dem Peer nicht erlaubt ist, über das bekannt gegebene Fenster hinaus Daten zu Senden. TCP - Flusskontrolle wenn der Peer mehr Daten Sendet als vereinbart werden die Daten vom Empfangenen TCP gelöscht.Bei UDP wird ein Datagramm , das nicht in den Socket - Empfangspuffer passt, einfach gelöscht.
UDP hat kein Flusskontrolle eine schneller Sender kann einen langsamen Empfänger mit Daten überfluten. Datagramme werden vom langsamen UDP einfach gelöscht.

SO_SNDBUF siehe SO_RCVBUF

SO_RCVLOWAT

SO_SNDLOWAT

SO_REUSEADDR The socket can be bound to an address which is already in use
SO_REUSEPORT ????
SO_TYPE Diese Option liefert den Socket Typ zurück SOCK_STREAM oder SOCK_DGRAM

SO_USELOOPBACK GetSockOpt::ERRORgesockopt()::Fehler ID = 10042 Beim Aufruf von getsockopt oder setsockopt wurde eine nicht unterstützte Option bzw. Ebene angegeben

IP_TOS Type Of Service
IP_TTL Time To Live
TCP_NODELAY

int setsockopt (SOCKET s,int level,int optname,
const char FAR * optval, int optlen);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: