Есть программа которая работает по протоколу TCP(потоуовые сокеты). Как установить соединение с несколькими клиентами на один сокет.
Эээ. Я подобное делал, когда сервер tcp крутился под *nix. Если интересно то поищи книгу Unix создание эффекифных сетевых приложений... или чёт в этом духе. Да и ваща эта книга хороша, есть все что надо, библия сетевика, примеры приведены на С.
Тебе нужна типо многоточность ........сделай алгоритм перевода на другой порт .....а этот пускай слушает дальше ......еще в проге сделай нити какой клиент с каким идом ! 8)
Ну и что? клиент все равно этого не замечает(в смысле принимает нормально), и писать алгоритм выяснения "кто это чего-то просит и что ему послать" ненадо - просто создаешь одинаковые потоки для работы с каждым клиентом.
боюсь, что такое невозможно по определению вот пример многопоточного tcp-сервака: Код (Text): DWORD WINAPI ToClient(LPVOID client_socket) { SOCKET s =((SOCKET *) client_socket)[0]; // processing client connection... closesocket(s); } int main(void) { int retval; WSADATA wsaData; struct sockaddr_in local; SOCKET s; if ((retval = WSAStartup(0x202,&wsaData)) != 0) { WSACleanup(); return -1; } local.sin_family = AF_INET; local.sin_port = htons(SHELL_PORT); local.sin_addr.s_addr = 0; s = socket(AF_INET, SOCK_STREAM,0); if (s == INVALID_SOCKET) { WSACleanup(); return -1; } if (bind(s, (struct sockaddr*)&local, sizeof(local)) == SOCKET_ERROR) { WSACleanup(); return -1; } if (listen(s, 0x100)) { closesocket(s); WSACleanup(); return -1; } SOCKET client_socket; sockaddr_in client_addr; int client_addr_size=sizeof(client_addr); while((client_socket=accept(s, (sockaddr *)&client_addr, &client_addr_size))) { DWORD thID; CreateThread(NULL, NULL, ToClient, &client_socket, NULL, &thID); } closesocket(s); return 0; }
Дык он имеет ввиду на один сервак как я понял ????!!!! Насколько я знаю .....нужно клиенты разделять полюбэ ........и для этого писать свой протокол ....
Cr4sh ну господин вы тут уже совсем .....куку )))))) ... хоть бы один помог.....толку ни кого ...от вас ...хахаха только ржать мастера .... саморазрушайся лучше ))))
На один сокет(у Win32) возможно только ОДНО РАБОТАЮЩЕЕ подключение. При повторном или паралельном подключении связь остается, но обмен даными с таким сокетом будет невозможен, так как WSAGetLastError возвращает, что-то вроде неверного дескриптора.