несколько подключений на один сокет

Тема в разделе "WASM.NETWORKS", создана пользователем witcher, 30 дек 2006.

  1. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Есть программа которая работает по протоколу TCP(потоуовые сокеты).
    Как установить соединение с несколькими клиентами на один сокет.
     
  2. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    Эээ. Я подобное делал, когда сервер tcp крутился под *nix. Если интересно то поищи книгу Unix создание эффекифных сетевых приложений... или чёт в этом духе. Да и ваща эта книга хороша, есть все что надо, библия сетевика, примеры приведены на С.
     
  3. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    WSAStartUp->socket->bind->listen->accept..
     
  4. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Это есть но ведь accept он же на каждое новое соединение возвращает новый сокет.
     
  5. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Тебе нужна типо многоточность ........сделай алгоритм перевода на другой порт .....а этот пускай слушает дальше ......еще в проге сделай нити какой клиент с каким идом ! 8)
     
  6. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    наверно никак
     
  7. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
    Ну и что? клиент все равно этого не замечает(в смысле принимает нормально), и писать алгоритм выяснения "кто это чего-то просит и что ему послать" ненадо - просто создаешь одинаковые потоки для работы с каждым клиентом.
     
  8. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    боюсь, что такое невозможно по определению
    вот пример многопоточного tcp-сервака:
    Код (Text):
    1. DWORD WINAPI ToClient(LPVOID client_socket)
    2. {
    3.     SOCKET s =((SOCKET *) client_socket)[0];
    4.        
    5.         // processing client connection...
    6.  
    7.         closesocket(s);
    8. }
    9.  
    10. int main(void)
    11. {
    12.     int retval;
    13.     WSADATA wsaData;
    14.     struct sockaddr_in local;
    15.     SOCKET s;
    16.  
    17.     if ((retval = WSAStartup(0x202,&wsaData)) != 0)
    18.     {
    19.         WSACleanup();
    20.         return -1;
    21.         }
    22.  
    23.     local.sin_family = AF_INET;
    24.         local.sin_port = htons(SHELL_PORT);
    25.     local.sin_addr.s_addr = 0;
    26.  
    27.     s = socket(AF_INET, SOCK_STREAM,0);
    28.  
    29.     if (s == INVALID_SOCKET)
    30.     {
    31.         WSACleanup();
    32.         return -1;
    33.         }
    34.  
    35.     if (bind(s, (struct sockaddr*)&local, sizeof(local)) == SOCKET_ERROR)
    36.     {
    37.         WSACleanup();
    38.         return -1;
    39.         }
    40.  
    41.       if (listen(s, 0x100))
    42.       {
    43.       closesocket(s);
    44.       WSACleanup();
    45.       return -1;
    46.       }
    47.  
    48.     SOCKET client_socket;    
    49.         sockaddr_in client_addr;  
    50.  
    51.     int client_addr_size=sizeof(client_addr);
    52.     while((client_socket=accept(s, (sockaddr *)&client_addr, &client_addr_size)))
    53.         {
    54.       DWORD thID;
    55.           CreateThread(NULL, NULL, ToClient, &client_socket, NULL, &thID);
    56.         }
    57.  
    58.     closesocket(s);
    59.     return 0;
    60. }
     
  9. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Дык он имеет ввиду на один сервак как я понял ????!!!! Насколько я знаю .....нужно клиенты разделять полюбэ ........и для этого писать свой протокол ....
     
  10. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    >> ...и для этого писать свой протокол ....
    ога, и kernel mode драйвер с root kit ом))))
     
  11. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Cr4sh ну господин вы тут уже совсем .....куку )))))) ... хоть бы один помог.....толку ни кого ...от вас ...хахаха только ржать мастера .... саморазрушайся лучше ))))
     
  12. _Raven

    _Raven New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2006
    Сообщения:
    34
    На один сокет(у Win32) возможно только ОДНО РАБОТАЮЩЕЕ подключение. При повторном или паралельном подключении связь остается, но обмен даными с таким сокетом будет невозможен, так как WSAGetLastError возвращает, что-то вроде неверного дескриптора.