Port aus anderem Netzwerk erfahren ???
-
Was zu Geier ist das für ein Port des Netzwerks?
-
Er meint den Port des Clients, der sich mit seinem Server verbindet.
-
Du solltest zuerst mal die Frage beantworten: UDP oder TCP!?
Bei UDP: Pech
Bei TCP; einfach mit "send" Daten zurücksenden.
-
Entschuldigt bitte das ich erst jetzt antworte.
Ich hab es aber jetzt hinbekommen. Es läuft bei mir alles über TCP.
Es war von mir ein bisschen doof formuliert. Sorry
Es ging nur darum das die Geräte ja ausserhalb des Netzwerkes sind in dem sich der Server befindet und ich nicht richtig wusste wie ich die Geräte dann quasi wieder ansprechen kann wenn ich ihnen einen Befehl senden möchte. Dazu benötigte ich ja die Socket Daten des Gerätes. Das das Gerät( ausserhalb des Netzwerks) ja auch an einem Port lauscht um Daten zu empfangen, wollte ich nur wissen wie ich diesen Speichern kann beim ersten mal wenn das Gerät Daten sendet, d.h. IP Adresse und Port. Das steht ja alles in der struct sockaddr drin .
Ich habe es schließlich so gelöst das ich die dann jetzt zwischenspeicher und bei Bedarf diese mir heraushole und meinen Befehl an das Gerät senden kann.Danke an DrakoXP, hast mir einen kleinen Denkanstoß gegeben
Gruß
Jamaram
-
Kapier ich nicht, was Du da schreibst... Du verwendest TCP, somit kapier ich das nicht...
-
Was genau verstehst du denn nicht?
Bitte erklärs mir damit ich es vielleicht verstehe. Der Fehler liegt ja wahrscheinlich bei mir?!In der sockaddr_in werden doch die Daten vom Client gespeichert wenn ich ihn per accept(socket,(sockaddr*)&sin,&lin) akzeptiere. Diese speichere ich dann zwischen und wenn ich wieder etwas an diesen Client senden möchte nutze ich die zwischengespeicherten sockaddr_in Daten für diesen Client.
-
Schwachsinn, wie ich bereits in meiner ersten Antwort schrieb.
accept liefert dir einen Socket zurück. Diesen gibst du immer bei send() und recv() and und dann kann dir die sockaddr gänzlich egal sein.
Was machst du denn aktuell mit dem Rückgabewert von accept? Ignorieren?
accept gibt dir im Erfolgsfall wie bereits erwähnt einen gültigen Socket zurück,
den du je nach Betriebssystem mit close oder closesocket wieder freigeben musst.
Wenn dein Server lange genug läuft und du die Sockets immer offen lässt,
kracht es irgendwann in der Form, dass accept dir meldet, dass es keine Verbindungen mehr annehmen kann.
-
Beim TCP die getpeername(sock,sockaddr&,size&) Funktion liefert client info. Also beim UDP, wenn du connect().
-
saperounlogged schrieb:
Beim TCP die getpeername(sock,sockaddr&,size&) Funktion liefert client info. Also beim UDP, wenn du connect().
WHAT?
Seit wann benutzt man bei UDP connect?
Ich meine, ja, es geht, aber... das is genau so wie bei TCP die sockaddr aufzuheben, damit man auch Daten zurückschicken kann...
-
TCP funktioniert über Router-Grenzen hinweg. Deshalb ist die Info in dem sockaddr total sinnlos, da der Rückkanal nur geht, wenn die Client-Seite die Verbindung aufbaut...
Also, nimm den Rückgabewert von "accept" und gut ist... alles andere ist für mich unverständlich und funktioniert i.d.R. nur im gleichen Netzwerksegment.