0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
1 | |
Грамотная реализация клиент-серверного приложения10.05.2009, 21:40. Показов 22590. Ответов 31
Метки нет (Все метки)
Возник вопрос как грамотно реализовать клиент-серверное приложение под Linux'ом. Пока имеется стандартная реализация через потоковые сокеты. Но при некорректном завершении работы клиента сервер подвисает и умирает для внешних запросов. Здесь смысл почему так происходит понятен. Необходимо реализовать грамотную реализацию для устранения этой проблеммы. Слышал про не блокирующие сокеты. Но в эту сторону не хочу копать. Хочется реализовать с помощью процессов либо потоков. Вроде как с помощью функции fork можно делать при каждом запросе копию процесса и работать с каждым запросом в индивидуальном процессе. Либо можно реализовать с помощью потоков. Слышал, что понятие потоков и процессов в linux'е отличается от винды. Вот хочу дельный совет куда начать копать, чтобы не ошибиться маршрутом. Хочется реализовать грамотно и не сложно)). Заранее спасибо.
0
|
10.05.2009, 21:40 | |
Ответы с готовыми решениями:
31
Прокомментировать код клиент-серверного приложения Реализация клиент-серверного соединения Реализация клиент-серверного взаимодействия на C# Реализация клиент-серверного взаимодействия |
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
15.03.2010, 22:02 | 22 |
Не заметил =)
0
|
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
|
|
26.03.2010, 11:34 | 23 |
Решил сделать несколько простеньких сетевых игрушек типа морской бой, шашки и т.д.
Так вот возник вопрос как правильно сделать. Создавать поток на каждое соединение или в цикле по очереди слушать каждый сокет?
0
|
26.03.2010, 11:39 | 24 |
Для начала сделай по простому, т.е. БЕЗ потоков. Внешне это будет подтормаживать, но зато хотя бы как-то поймёшь, как реализовывается сетевая часть, не вникая в премудрости работы с несколькими потоками. А потом можно работать с потоками
0
|
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
|
||||||
26.03.2010, 14:20 | 25 | |||||
Ну вот взял пример с неблокирующими сокетами и начал смотря на код делать )
Я так понимаю Listener - это здесь получает нового клиента и его можно сделать блокирующим и разместить в одном потоке, а уже sock делать неблокирующим и всех клиентов разместить в другом?
0
|
26.03.2010, 14:50 | 26 |
У меня твой код работает. Во всяком случае telnet к нему приконнектился
Код
$ telnet 127.0.0.1 3425 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Добавлено через 46 секунд Правда сервер всё время пишет "Error: select" Добавлено через 1 минуту Неудивительно - ты условие <=0 затащил вовнутрь последнего параметра select'а
1
|
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
|
|
26.03.2010, 15:11 | 27 |
Да, точно сейчас нормально подключился. Спасибо! Буду дальше разбираться.
0
|
4 / 4 / 0
Регистрация: 26.03.2010
Сообщений: 28
|
|
18.06.2010, 01:01 | 28 |
Подскажите, ну например я использую неблокирующие сокеты, как реализовать принятие и отправку данных?
Код
for(set<int>::iterator it = clients.begin(); it != clients.end(); it++) { if(FD_ISSET(*it, &readset)) { bytes_read = recv(*it, buf, 1024, 0); if(bytes_read <= 0) { close(*it); clients.erase(*it); continue; } } }
0
|
Dimrix
|
|
20.09.2010, 14:52 | 29 |
Да да, интересует как передавать и получать данные в таком режиме. С "форточками" (форк) у меня получалось принимать и получать данные, но вариант с форточками не подходит по уже выше сказанным причинам (сам наступил на грабли и осознал). Но есть ли примерчик как в данном варианте принимать/получать данные
|
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 7
|
|
22.03.2012, 08:03 | 30 |
есть хорошая книжка, моего бывшего преподавателя, там есть решение этой задачи (прозрачное для понимания)
Решений там несколько , зависит от постановленной задачи программы вот линк на книжку в pdf (начинать читать с 133 стр) http://www.stolyarov.info/books/pdf/osintro.pdf
0
|
22.03.2012, 15:50 | 32 |
0
|
22.03.2012, 15:50 | |
22.03.2012, 15:50 | |
Помогаю со студенческими работами здесь
32
Реализация клиент-серверного приложение Архитектура клиент-серверного приложения Создание клиент-серверного приложения Создание клиент серверного приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |