Jak zrobić wątkowość dla klinetów serwera ?

Odpowiedz Nowy wątek
2011-10-25 20:54
0

Mam sobie taki serwer, który tam wyrzeźbiłem z ciężkim sercem:

//---------------------------------------------------------------------------

#include <winsock.h> 
#include <string> 
#include <iostream>
#include <vcl.h>
#include <dos.h>
//#pragma hdrstop

using namespace std;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        WSADATA wsadata;
        SOCKET listening, client;
        SOCKADDR_IN address, client_address;
        int port = 9000;
        int address_length;
        char message[512];
        string content;

        cout << "Server start" << endl;
        sleep(1);
        cout << "Port: " << port << endl;
        sleep(1);
        cout << "Listening..." << endl;

        WSAStartup(MAKEWORD(2,2), &wsadata);
        listening = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
        address.sin_family = AF_INET;
        address.sin_port = htons(port);
        address.sin_addr.s_addr = htonl(INADDR_ANY);
        bind(listening, (struct sockaddr*)&address, sizeof(address));
        listen(listening, 10);
        address_length = sizeof(client_address);
        client = accept(listening, (struct sockaddr*)&client_address, &address_length);

        while(1) {

                for(int i = 0 ; i < sizeof(message) ; i++) {
                        char c[1] = "";
                        message[i] = c[0];
                }

                recv(client, message, sizeof(message), 0);
                content = message;

                cout << content.c_str() << endl;
                sleep(2);
        }

        closesocket(client);
        WSACleanup();

        return 0;
}
//---------------------------------------------------------------------------

Chciałbym by każdy nowo dołączony klient miał swój wątek i po zakończeniu transmisji żeby ten wątek został zamknięty. To kod powinienem wstawić do funkcji accept ? żeby kierował do nowego wątku i przesyłał tam dane ? Mógłby ktoś podpowiedzieć ?

Pozostało 580 znaków

2011-10-27 17:06
0

Niebardzo jestem obeznany w winsock, ale wydaje mi sie ze nie ma sensu robic oddzielnego watku dla kazdego klienta(jeszcze zalezy do czego to serwer). Poczytaj o SELECT
http://msdn.microsoft.com/en-[...]op/ms740141%28v=vs.85%29.aspx
http://firsthost.nazwa.pl/wor[...]17/winsock-tutorial-4-select/

To tak zanim nie wypowiedza sie osoby co maja pojecie na ten temat ;p


non omnis moriar i tyle :-)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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