Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Socket  (Прочитано 6933 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kiborg
Гость
« : 14-05-2008 21:31 » new

Повисает Форма на сервере при работе с консолью с этим же кодом  всё нормально! Повисает на accept то есть ждёт клиента, как это можно избежать! (Visual c++) 
Код:
ss = accept(s,(sockaddr *)&client,&size);
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 14-05-2008 22:15 » 

А вывести в отдельный Thread пробовали?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
kiborg
Гость
« Ответ #2 : 15-05-2008 01:29 » 

Вот попробовал, только  в поток не попадает Быть такого не может
Код:
#include "stdafx.h"
#include <winsock2.h> 
#pragma comment(lib, "ws2_32.lib")
HANDLE hThread;
DWORD Count, ThreadId;
DWORD THread(LPVOID lParam);
    int PORT=1234;
SOCKET ss, cc, r;
sockaddr_in Addr;
WSADATA Wsa;
    bool server;

void  main () {
WSAStartup(0x0101,&Wsa);
  Addr.sin_family=AF_INET;
Addr.sin_addr.s_addr=INADDR_ANY;
Addr.sin_port=htons(PORT);
server=TRUE;
ss=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (bind(ss, (sockaddr*)&Addr, sizeof(Addr))==SOCKET_ERROR)
   { closesocket(ss);
  ss=0;
   } 

   if (listen(ss, SOMAXCONN)==SOCKET_ERROR)
   {closesocket(ss);
ss=0;
   }
    hThread=CreateThread(NULL,0,THread,&Count,0,&ThreadId);
   
}
DWORD THread(LPVOID lParam)
{
   LPDWORD lpdwCount=(LPDWORD)lParam;
   *lpdwCount=0;
   if(!r) r=accept(ss,(sockaddr*)&Addr, NULL);
   if (r!=INVALID_SOCKET) hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)THread,&Count,0,&ThreadId);
   return *lpdwCount;
}
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 15-05-2008 20:01 » 

То что ты привел, если это не вырезка из контекста, код полный логических ошибок. Приводяший к пожиранию ресурсов системы, главным образом машинного времени. У тебя будет бесконечно создаваться новый ‎Thread, при этом старый Thread будет умирать. Начиная с главной нити. Также будут жраться ресурсы системы, связанные с хранением информации по нити.
« Последнее редактирование: 15-05-2008 20:07 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines