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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren