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.

Frage zu Sockets

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich bin gerade dabei mich für eine Hausarbeit in die Socketprogrammierung einzulesen. Das Programm wollte ich mit C/C++ realisieren, deswegen poste ich meine Frage hier und nicht im Netzwerkforum.

Als Beispielprogramm hab ich einen simplen Echo-Server gefunden. Den Code kann ich im großen und ganzen verstehen bis auf ein paar Kleinigkeiten.

// Send and receive data.

    int bytesSent;

    int bytesRecv = SOCKET_ERROR;

    char sendbuf[32] = "Client: Sending data.";

    char recvbuf[32] = "";


    bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );

    printf( "Bytes Sent: %ld\n", bytesSent );


    while( bytesRecv == SOCKET_ERROR ) {

        bytesRecv = recv( m_socket, recvbuf, 32, 0 );

        if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {

            printf( "Connection Closed.\n");

            break;

        }
Nun zu meiner Frage, zu dem obenstehenden Codesegment. Mir leuchtet es schon ein, dass dieser Abschnitt zum austausch von Nachrichten gedacht ist, und dies über die beiden Chararrays laufen soll. Was ich allerdings nicht ganz verstehen ist wieso ich
 int bytesRecv = SOCKET_ERROR;

while( bytesRecv == SOCKET_ERROR )

setzen muß?

Könnte mir jemand auf die Sprünge helfen, wieso ich zuerst die "bytesRecv" als SOCKET_ERROR setzen muß und dann while-Schleife solange laufen lassen muß, solange wie der "SOCKET_ERROR" besteht?

Vielen dank im voraus.

Ich halte die while-Schleife für Quatsch. Wenn recv einen Fehler meldet, ist es nicht besonders sinnvoll, es noch einmal zu versuchen.

Außerdem ist es Unsinn, den Rückgabewert von recv mit WSAECONNRESET zu vergleichen. Das ist 10054, ein gültiger Rückgabewert von recv. WSAGetLastError könnte diesen Wert zurückgeben, aber die Funktion wird hier gar nicht aufgerufen.

Woher hast du denn diesen Code?

Erstmal danke für die Antwort. Das hat mich eben auch ein bischen stutzig gemacht, wieso die while-Schleife mit der Fehlermeldung verglichen werden soll.

Aber wie schaut es hiermit aus? Hat dann das seine gültigkeit, bzw. überhaupt einen Sinn?

int bytesRecv = SOCKET_ERROR;

Den Code hab ich nach längerer Suche über die Codesuche von Google gefunden.

Aber wie schaut es hiermit aus? Hat dann das seine gültigkeit, bzw. überhaupt einen Sinn?
Wenn man die Sinnlosigkeit der Schleifenbedingung außer Acht lässt, ist das so richtig. Ohne diese Anweisung (oder mit einem anderen Wert) würde die Schleife ja gar nicht erst betreten.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.