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

Ich weiß nicht ob ich gerade auf dem Schlauch stehe aber angenommen ich will eine Applikation schreiben mit der 2 Benutzer miteinander chatten können und stelle dazu eine Socketverbindung her und lege eine NetworkStream Instanz damit an.

Jetzt kann ich darüber ja einfach Daten hin und her schicken, aber woher weiß ich auf der einen Seite das die andere jetzt Daten gesendet hat die ich lesen muss? Es gibt ja kein Event oder so dafür.

Wann man senden muss ist ja klar, sobald der Benutzer etwas eingegeben hat aber fürs empfangen fällt mir nur die DataAvailable Property des NetworkStreams auf, welche aber ja bedeuten würde das man ständig in einer Schleife darauf abfragen müsste und das würde (im besten Fall nur) das Senden blockieren. Ich bezweifle mal einfach das man aus 2 verschiedenen Threads gleichzeitig schreiben und lesen kann.

Jeweils eine Socketverbindung zum Lesen und Schreiben finde ich auch nicht ansprechend. Die einzige Möglichkeit die mir noch einfallen würde wäre das immer abwechselnd etwas geschickt wird bzw. wenn gerade nichts eingegeben wurde ein leerer Buffer gesendet wird (oder etwas das verworfen wird) aber das produziert ja unnötig Verkehr...

Ohne erstmal konkret auf NetworkStream einzugehen unterscheidet man bei Socket-Programmierung prinzipiell blockierende und "non-blocking", das erreicht man z.Bsp. über die SO_LINGER und die diversen Kapselungen in den Socket-API's. Man spricht auch von synchroner und asynchroner Socket-Programmierung. Semaphoren sind dann komplett ereignisgesteuert und nicht blockierend.

Fakt ist blockierende sockets warten IMMER auf das Feedback des Gegenübers. Ob das ein Connect oder ein Read ist, spielt keine Rolle.

Ergo wird das im Client oft ganz normal programmiert und im Server mit einem Thread pro Client.

Da Du eine bidirektionale Lösung gewählt hast, bedeutet dass das beide Partner jeweils spontan senden könnten, egal wer nun als Socket-Server und Socket-Client fungiert.

Wichtig ist demnach nur, dass beide in einer Schleife DataAvailable abfragen müssen.

Hey,

also ich nutze da für meinen UDP-Listener sowas:


            Dim sEndpoint As New IPEndPoint(IPAddress.Loopback, 0)

            Dim state As New StateObject

            cSocket.BeginReceiveFrom(state.Buffer, 0, state.BufferSize, SocketFlags.None, sEndpoint, New AsyncCallback(AddressOf onDataReceivedC), state)

Ist nun VB.Net

Ich weiß nicht ob du das evtl. auf dein Prob übertragen kannst.

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.