![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.02.2010
Сообщений: 14
|
![]()
Доброго времени суток
Подскажите, пожалуйста, ответ на вопрос. Ситуация следующая: Пишу чат на C (под Linux) на сокетах и тредах (pthread.h). Сервер создает сокет и слушает, как только к нему стучатся он делает accept (создается новый сокет) и создает тред , через который общается с клиентом (принимает от него сообщение, и отсылает полученное всем существующим клиентам.) Клиент же в свою очередь создает сокет, пытается приконектится к серверу (у него один сокет). После чего запускается тред, в котором он отправляет сообщения через один сокет, а основной поток слушает этот сокет. Вопрос следующий, может быть такое, что случится коллапс?) из-за того, что у меня 2 процесса в клиенте используют один сокет? или нужно создавать 2 сокета у клиента: на отправку и на прием сообщений (с соответствующими изменениями у сервера)? А может быть можно как-то по-хитрому справиться с ситуацией с помощью mutex? Заранее спасибо за ответ |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 11.01.2012
Сообщений: 177
|
![]()
зачем клиенту несколько потоков? клиент коннектится к серверу и через этот коннект общается в сервером, ему больше ничего не нужно
progromore.i2p - первый русскоязычный портал программистов в скрытосети
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.02.2010
Сообщений: 14
|
![]()
А как без потоков? разве процесс не висит пока не отправит сообщение, если натыкается на функцию send? прошу меня поправить, если это не так)
|
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 11.01.2012
Сообщений: 177
|
![]() Цитата:
если это особенно важно, то можно вынести отправку и получение данных в отдельный поток. но суть это не поменяет
progromore.i2p - первый русскоязычный портал программистов в скрытосети
|
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 05.04.2012
Сообщений: 56
|
![]()
Твоя проблема по большому счету подобна моей. Единственное весомое отличие- я работаю не под пингвином.
сервер, (1 процесс) Далее создаешь поток клиента и передаешь 'сокет' в параметре. Ну и все, останется только довести все это до ума, т.е сделать сокет в потоке неблокирующим. Что бы можно было параллельно получать и отправлять данные. Не было ступенчатости как в моем случае - сервер- клиент-сервер-клиент, а было, к примеру сервер-сервер-сервер,клиент,сервер |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос серверу на передачу файла клиенту (Socket'ы) | Nibelim | C++ Builder | 1 | 13.03.2012 09:12 |
Socket'ы | Mu$T@nG | Помощь студентам | 4 | 19.07.2010 20:58 |