winsock empfangsprobleme

Gast #6913664
Lesenswert?
• ▲
▼
Einen schönen guten Abend,

ich habe ein Problem mit Winsock.
Ich kann zwar vom client zum Server senden und es kommt auch an, aber 
dann bleibe ich in einer Endlosschleife hängen.
Client und Server laufen auf dem Selben PC.
1
uint8_t main(void) 
2
{
3
    initServer();
4
    while(1)
5
    {
6
        waitForData();
7
    }
8
}
1
uint8_t waitForData(void)
2
{
3
    int iResult;
4
    char recvbuf[DEFAULT_BUFLEN];
5
    int recvbuflen = DEFAULT_BUFLEN;
6
    // Receive until the peer shuts down the connection
7
//    do{
8
        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
9
        if (iResult > 0)
10
        {
11
            printf("Bytes received: %d\n", iResult);
12
            for(uint8_t x=0; x<iResult; x++)
13
            {
14
                printf("%c ", recvbuf[x]);
15
            }
16
            printf("\n\n");
17
            (void)receiveArray(&recvbuf[0], &recvIData[0], iResult);
18
            for(uint8_t x=0; x<iResult; x++)
19
            {
20
                printf("0x%x ", recvIData[x]);
21
            }
22
            printf("\n\n");
23
        }
24
        else if (iResult == 0)
25
        {
26
            printf("Connection closing...\n");
27
        }
28
        else
29
        {
30
            printf("recv failed with error: %d\n", WSAGetLastError());
31
            closesocket(ClientSocket);
32
            WSACleanup();
33
            return 1;
34
        }
35
//    }while (iResult > 0);
36
}

Wenn ich den server über der konsole starte sehe ich zunächst nichts. 
Erst wenn ich vom Client datan sende, sehe ich folgenden output

Bytes received: 4
3 R 0 1

0x3 0x22 0x0 0x1

Connection closing...
Connection closing...
Connection closing...

das läuft dann immer so weiter.
Warum kommt funktioniert das immer nur beim ersten durchlauf?
Gast #6913681
Lesenswert?
• ▲
▼
Was erwartest Du?

Der Client beendet die Verbindung, Du landest wieder in main() und rufst 
aus der Schleife heraus wieder waitForData() auf. Dort versuchst Du dann 
wieder, vom selben (längst getrennten) Socket zu lesen, und es geht von 
vorne los.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.