maddin Geschrieben 12. Dezember 2006 Geschrieben 12. Dezember 2006 Hallo, ich schreibe gerade einen Server, der sich u.a via SOAP ansprechen lässt. Ich habe dazu im Moment einen Thread geschrieben, der einen Socket erstellt, diesen an eine Adresse binden und auf Anfragen lauscht. Also: 1. while (true) 1.1. Socket erstellen 1.2. open 1.3. bind 1.4. listen 1.5. accept 1.6. read 1.7. Anfrage bearbeiten 1.8. socket schließen Problem, wie man vielleicht erkennen kann ist, das der Thread lediglich eine Anfrage zur selben Zeit verarbeiten kann. Bei den Anfragen, die ich an den Server schicke, wird zuerst eine WSDL-Datei abgefragt, danach die SOAP Nachricht geschickt. Die beiden Anfragen werden so schnell nacheinander an den Server geschickt, dass dieser noch mit dem Schließen des Sockets beschäftigt ist und die zweite Anfrage nicht rechtzeitig bearbeiten kann. Die Lösung also: Ich muss mehrere Anfragen gleichzeitig bearbeiten können. Und darin liegt auch genau mein Problem - eigentlich keine Ahnung von der socket-Programmierung und somit auch kaum eine Idee für mein Problem. Meine bisherige Idee war, dass ich einfach mehrere sockets erstelle, aber diese kann ich doch eigentlich nicht auf die gleiche Adresse binden - also auch nicht wirklich eine Lösung. Ich hoffe jemand von Euch kann mir einen entscheidenden Tipp geben. Zitieren
Klotzkopp Geschrieben 12. Dezember 2006 Geschrieben 12. Dezember 2006 Meine bisherige Idee war, dass ich einfach mehrere sockets erstelle, aber diese kann ich doch eigentlich nicht auf die gleiche Adresse binden Brauchst du auch nicht. Du kannst mit deinem Listen-Socket mehrmals accept aufrufen. Du brauchst die Schritte 1.1 bis 1.4 nur einmal auszuführen. Schritt 1.5 kommt in eine Schleife, und der Socket, den du bei accept bekommst, wird jeweils in einem eigenen Thread bearbeitet. Zitieren
individuum Geschrieben 12. Dezember 2006 Geschrieben 12. Dezember 2006 Hallo, aber man braucht doch für jeden Clienten einen eigenen Socket oder nicht? was ist denn eigentlich der wesentlich unterschied zwischen Csockets und der winsock klasse? ich möchte einen Server schreiben der meherer clients verwaltet. er soll auch einen reconnect ausführen falls die verbindung verloren geht! den reconnect hatte ich gedacht in einem eigenen thread durchzuführen. wenn der da "in" select wartet, kann der andere thread dann weiter mit den andern clienten kommunizieren? mfg Zitieren
Guybrush Threepwood Geschrieben 12. Dezember 2006 Geschrieben 12. Dezember 2006 Also ich hatte vor ein paar Jahren mal einen Chatserver + Client geschrieben. Der Server hat auf einem bestimmten Port gelauscht auf dem sich der Client verbunden hat. Dann hat der Server dem Client einen freien Port geschickt und einen Thread gestartet der auf dem Port gelauscht hat. Der Client hat dann die Verbindung geschlossen und eine neue zu dem anderen Port geöffnet worüber dann die komplette weiter Kommunikation gelaufen ist. Hat zwar gut funktioniert, aber ich denke nicht das das ein gute Lösung ist. Zitieren
individuum Geschrieben 13. Dezember 2006 Geschrieben 13. Dezember 2006 ich weiß nicht so recht wie ich das jetzt realisieren soll.. jedem clienten einem eigenen thread zu geben gefällt mir irgendwie nicht.. mein server soll wenn er daten bekommt die auch zu jedem clienten möglichst "zeitgleich" senden. dann müßt ich ja die daten an jedem thread weitergeben... Wenn er keine daten bekommt soll er ein lifebit senden und empfangen um zu überprüfen ob der client noch aktiv ist. also dacht ich das ich ne extra thread für den (re-) connect mach, aber wie übergibt man denn die sockets? hab leider keine erfahrung von multithreading.. bitte für jede idee dankbar Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.