Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 03:36   #1
waplus
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию проблема многопоточности C++

пишу макет TCP сервера, все бы хорошо но када клиент подключается программа аварийно закрывается...в чем проблема?

Код:
#include <iostream>
#include<winsock2.h>
#include<windows.h>
#include<stdio.h>
#include<process.h>

#define SERVER_IP "127.0.0.1"
#define PORT 7595

#define PRINTNUSERS if (nclients) printf("\n%d user on-line\n",nclients);else printf("\nNo User on line\n");

int nclients = 0;

void SexClient(void* client_socket){
    SOCKET my_sock;
    printf("ok");
    //return -5;
    my_sock=((SOCKET *) client_socket)[0];
    char buffa[20*1024];
    #define sHELLO "Welcome to TCP server"
    send(my_sock, sHELLO, sizeof(sHELLO), 0);
    while((recv(my_sock,&buffa[0],sizeof(buffa),0))!=SOCKET_ERROR)
send(my_sock,&buffa[0],sizeof(buffa),0);

    nclients--;

    printf("\nDisconnect");
    closesocket(my_sock);



    }



using namespace std;

int main(int argc, char* argv[]){
    char buff[1024];
    printf("TCP Server v1.0");

    if(WSAStartup(0x0202, (WSADATA *) &buff[0])){
        printf("\nError WSAStartup");
        return -1;
    }
    SOCKET sock;

    if((sock=socket(AF_INET, SOCK_STREAM, 0))<0){
        printf("\nError create socket");
        return -1;
    }
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(PORT);
    local_addr.sin_addr.s_addr = 0;

    if(bind(sock, (sockaddr *) &local_addr, sizeof(local_addr))){
        printf("\nError bind");
        closesocket(sock);
        WSACleanup();
        return -1;
    }
    if(listen(sock, 0x100)){
        printf("\nError listen");
        WSACleanup();
        closesocket(sock);
        return -1;
    }

    printf("\nTyping for connections...");
    SOCKET client_socket;
    sockaddr_in client_addr;

    int client_addr_size = sizeof(client_addr);

    while((client_socket=accept(sock, (sockaddr *) &client_addr, &client_addr_size))){
        nclients++;
        HOSTENT *hst;
        hst = gethostbyaddr((char *) &client_addr.sin_addr.s_addr, 4, AF_INET);
        PRINTNUSERS;

        printf("\nNew connection...", (hst)?hst->h_name:"", inet_ntoa(client_addr.sin_addr));
    
        _beginthread(SexClient, NULL, 0);
    }
}
waplus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Вопрос] Реализация многопоточности запуска/остановки конкретных программ из списка Человек_Борща Общие вопросы Delphi 8 06.10.2010 08:59
проблема с реализацией многопоточности в c# whitebrain Помощь студентам 0 19.03.2010 01:23
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37