Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Клиент-серверное приложение |
Автор: Alexey_2007 30.1.2007, 22:23 |
Может ли мне кто-нибудь подкинуть пример работы с WinSock2. Смотрел в разделе исходники, но не нашел. Мне нужно именно клиент-серверное приложение, такое чтобы сервер мог получать информацию от несольких клиентов(что очевидно... но у меня что то не получается именно так) TCP\IP. Если вместе с этим будут каким-либо образом прикручены диалоги - это будет вообще здорово!!! |
Автор: witex 31.1.2007, 02:26 |
http://www.citforum.ru/book/cook/winsock.shtml и исходники и маленькое пособие! Только вот ты разделом ошибся! Всё таки сетевое программирование! |
Автор: Alexey_2007 31.1.2007, 15:47 |
thanks!! |
Автор: kleks 2.5.2007, 15:43 |
У меня возник вопрос....по поводу модели "клиент-сервер"....предположим у меня есть сервер и два клиента подключившиеся к этому серверу, как мне организовать банальный чат между этими клиентами??? на примере клиента и сервера описанные по предыдущей ссылке. Т.е. как мне организовать связь между двумя потоками?? |
Автор: -Kp0T- 2.5.2007, 18:40 | ||
Vivat Крис Касперский, но я тебе не отвечу на вопрос. Когда знакомился с winsock библиотекой тоже обдумывал реализацию своей задачи в мультипоточности с блокирующими сокетами, но это не лучшее решение, ибо возрастает сложность программирования. Более гибкое решение все таки с сокетами, работающими в асинхронном режиме. Привожу пример эхо-сервера c обоработкой CTRL+BREAK, CTRL+C, VK_RETURN. Ну про клиент думаю догадаешься :) ( telnet 127.0.0.1 7777 ). [ упор на WSAAsyncSelect(), но его использование ведет к увиличению количества потоков на 1 ]
|
Автор: kleks 2.5.2007, 19:38 | ||
...конечно спасибо огромное, но я всё-таки так и не понял. Меня по сути интересует следующие: Два клиента подключенны к одному серверу, как сделать так чтобы эти два клиента могли обмениваться между собой информацией!!!??? Вот вариант моего сервера...
|
Автор: -Kp0T- 4.5.2007, 02:02 |
Вообще не зря я тебе привел тут про асинхронные сокеты и WSAAsyncSelect(). Функция действительно мощная. Да ладно. Как бы я поступил с твоим кодом. - В пространстве глобальных переменных определил бы стек (как класс). - Плохо то что поток замерз по функции recv и ждет данные или ошибку :) - Тем не менее можно данные о подключений клиентов (в частности нам надо SOCKET) вынести опять таки в globalnamespace или инкапсулировать в класс (как душе угодно) - Пусть "потоки висят" в ожидании данных, их уже не спасешь. Чтоб срочно отослать данные (которые упали в стек) нужен другой поток (только чтобы отправить второму клиенту). А теперь собственно программный код, тока на русском языке :) Поток[i] принял данные по recv, положил в стек данные (что и от кого пришло), отправил сообщение оконной процедуре, [ например, WM_USER+1. Как мы помним, ОСь не использует сообщения выше WM_USER - они зарезервированы для потребителя :) ] и снова поток замерз в ожидании отклика функции recv. Тем временем, как пришло сообщение WM_USER+1, оконная процедура извлекла данные из стека, решила что и кому слать по полученным данным и создает новый поток (или потоки - сам реши всем слать в одном потоке или в отдельном. - Случай более 2-х клиентов) который займется отправкой данных. После отправки поток должен завершиться с кодом доставки (ошибки). Я бы тебе код набросал, да сроки поджимать начинают по своему проекту... |