Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.