Jak zrobić żeby klient ponownie łączył się z serwerem?

0

Mam taki problem mały. Na razie w programie nie dzieje się nic ciekawego, gdy klient połączy się z serwerem to serwer wypisuje komunikat i uruchamia wątek w którym wypisywana jest liczba klientów. Maksymalna liczba klientów to 4. I mam pytanie , jak trzeba by zrobić żeby po odłączeniu się jednego z klientów na jego miejsce mógł połączyć się nowy klient?
Daję kod serwera.

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <windows.h>
#include <string.h>

WSADATA wsaData;
SOCKET sock[5];
SOCKADDR_IN addr[5];
int rozmAddr[5];
int i, err, lK = 0;
HANDLE hThread;
DWORD dwThreadID;
boolean koniec = FALSE;

DWORD WINAPI watek(LPVOID lpParam) {
    printf("klient nr: %d\n", lK-1);
    return 0;
}

int main()
{
    err = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (err != 0) {
        printf("Błąd funkcji WSAStarup().\n");
        return 1;
    }
    sock[0] = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if(sock[0] == SOCKET_ERROR) {
        printf("Błąd funkcji socket().\n");
        return 1;
    }
    addr[0].sin_family = AF_INET;
    addr[0].sin_port = htons(1000);
    addr[0].sin_addr.s_addr = (INADDR_ANY);
    if(bind(sock[0], (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR) {
        printf("Blad funkcji bind().\n");
        return 1;
    }
    for (i = 1; i <= 4; i++) {
        rozmAddr[i] = sizeof(addr[i]);
    }
    ioctlsocket(sock[0], FIONBIO, 1);
    if (listen(sock[0], SOMAXCONN == SOCKET_ERROR)) {
        printf("Błąd funkcji listen().\n");
        return 1;
    }

    while (koniec == FALSE) {
        if (lK <= 4) {
            sock[lK] = accept(sock[0], &addr[lK], &rozmAddr[lK]);
            if (sock[lK] == INVALID_SOCKET) {
                printf("Błąd funkcji accept().\n");
                return 1;
            } else 
		printf("Polonczono z klientem %d.\n", lK);
            hThread = CreateThread (NULL, 0, watek(), (LPVOID)sock[lK], 0, NULL);
            CloseHandle(hThread);
            lK++;
    }

    closesocket(sock[0]);
    WSACleanup();
    return 0;
}
0

A i jeszcze jedno pytanie. Trochę popisałem tak że w wątku wysyłane są jakieś tam informacje do klienta. I jest taki problem że jeżeli jest jeden klient to to działa dobrze ale w momencie pojawienia się drugiego klienta i rozpoczęcia jego wątku przestaje działać wątek pierwszego klienta. Co jest nie tak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1