Forum: PC-Programmierung winsock empfangsprobleme


von Felix (Gast)


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?

von Hmmm (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.