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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 02:38   #1
Kostya_OniL
Новичок
Джуниор
 
Регистрация: 16.04.2012
Сообщений: 2
По умолчанию Многопоточность на сервере

Помогите плиз реализовать сервер так,чтоб несколько клиентов могло к нему обращаться или хотя бы примерно как это можно сделать.Не могу найти пример норм реализации в инете(

Вот код.сервера
Код:
#include <winsock2.h>
#include <stdio.h>
#include <iostream>

using namespace std;
 
int main(void)
{
    WORD sockVer;
    WSADATA wsaData;
    int retVal;
 
    sockVer = MAKEWORD(2,2);
 
    WSAStartup(sockVer, &wsaData);
 
    //Создаем сокет
    SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    if(servSock == INVALID_SOCKET)
    {
        printf("Unable to create socket\n");
        WSACleanup();
        return SOCKET_ERROR;
    }

	SOCKADDR_IN sin;
    sin.sin_family = PF_INET;
    sin.sin_port = htons(1111);
    sin.sin_addr.s_addr = INADDR_ANY;
 
    retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));

    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to bind\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 
    //Пытаемся начать слушать сокет
    retVal = listen(servSock, 10);

    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to listen\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
    //Ждем клиента
    SOCKET clientSock;
 
    clientSock = accept(servSock, NULL, NULL);
 
    if(clientSock == INVALID_SOCKET)
    {
        printf("Unable to accept\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 

	char filename[80];
	retVal = recv(clientSock,filename, 80, 0);

	
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        return SOCKET_ERROR;
    }


//Создаем фаил
	FILE * file;
	errno_t en;
if ((en = fopen_s(&file,filename, "a")) != 0)
	{
		printf("Could not open file for writing\n");
		printf(filename);
		cin.get();
		cin.get();
		return 1;
	}


    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        return SOCKET_ERROR;
    }



 char szReq[80]; 

 //уведомление о конце сесси
 char finish[]="56773finish!hdf%1+2?32";

    while(true)
   {
      
       retVal = recv(clientSock, szReq, 80, 0);

	   if(strcmp(szReq,finish)==0) break;
	   
	    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        return SOCKET_ERROR;
    }
 
    printf("Got the request from client\n%s\n",szReq);
	
	//записуем в фаил
      fputs(szReq,file);
   };

	 fclose(file);

	 *szReq=NULL;

    char szResp[] = "Successful transmission";
 
    printf("Sending response from server\n");
    retVal = send(clientSock, szResp,sizeof(szResp), 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to send\n");
        return SOCKET_ERROR;
    }
 
    //Закрываем сокет
    closesocket(clientSock);
    closesocket(servSock);
 
    WSACleanup();
	cin.get();
	cin.get();
    return 0;
}

Последний раз редактировалось Stilet; 23.12.2012 в 11:49.
Kostya_OniL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность. Просветленный Общие вопросы Delphi 7 15.10.2011 15:44
многопоточность MasterSporta Общие вопросы C/C++ 4 30.09.2011 13:27
Многопоточность S@nek C# (си шарп) 9 17.07.2011 07:20
Многопоточность nats C# (си шарп) 5 25.06.2011 11:51
Многопоточность и с++ Koshmarovsky Visual C++ 13 06.09.2010 20:39