На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Проблема с Winsock [C++ bulider] , описание в теме
      Добрый день.
      Я пишу сетевую прогу на C++ bulider 2007.ипользуя winsock.
      Я выбрал стандартное VCL приложение. Потом на форму сделал кнопку, в её оброботик прописал

      StartServer();

      В гланвный файл формы(где обработчики, про инлудил мною созданый файл "functions.cpp" с этим содержиммым.

      ExpandedWrap disabled
        #include <windows.h>
        #include <winsock2.h>
         
        //---------------------------------------------------------------------------
        DWORD WINAPI ListenThread(LPVOID IpParam);
        DWORD WINAPI ClientThread(LPVOID client);
        //---------------------------------------------------------------------------
         
        int StartServer()
        {
            WSADATA wsadata;
            WSAStartup(MAKEWORD(2,0),&wsadata);
            HANDLE Thread;
            DWORD thID;
            Thread=CreateThread(NULL,0,ListenThread,0,0,&thID);
            if(Thread==NULL)
                MessageBox(NULL,"Thread error","Error",MB_OK);
         
         
            return 0;
        }
        //---------------------------------------------------------------------------
        DWORD WINAPI ListenThread(LPVOID IpParam)
        {
            HANDLE Thread;
            DWORD thID;
         
            SOCKET server,client;
            struct sockaddr_in serveraddr,clientaddr;
            int clientsize=sizeof(clientaddr);
            int err;
            server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
         
            serveraddr.sin_family=AF_INET;
            serveraddr.sin_port=htons(81);
            serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
         
            err=bind(server,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
            if(err==-1)
                  MessageBox(NULL,"Bind error","Error",MB_OK);
         
            err=listen(server,4);
            if(err==-1)
                   MessageBox(NULL,"Listen error","Error",MB_OK);
            if(err==-1)
         
         
            client=accept(server,(struct sockaddr *)&clientaddr,&clientsize);
            if(client==-1)
                MessageBox(NULL,"Accept error","Error",MB_OK);
            else
                Thread=CreateThread(NULL,0,ClientThread,(LPVOID)client,0,&thID);
         
         
            return 0;
        }
         
        DWORD WINAPI ClientThread(LPVOID client)
        {
         MessageBox(NULL,"Обработка клиентa","",MB_OK);
        }


      Делоо в том что во вконце функции ListenThread, должен вызваться поток на обслуживание клиент

      (ClientThread(LPVOID client). после фунции accept(). которая ждёт подключений.

      дело в том что при надатии на кнопку я сразу получаю сообщение вот это

      MessageBox(NULL,"Обработка клиентa","",MB_OK);

      из функции ClientThread(LPVOID client).

      Но я должен был получить его после того как подключусь к серверу а не срузу после нажати кнопки.

      помогитье плиз. с меня +++

      Добавлено
      сорри я дурак нашол ошибку

      лишнее if(err==-1)
      Сообщение отредактировано: _SEREGA_ -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0245 ]   [ 16 queries used ]   [ Generated: 27.04.24, 20:39 GMT ]