|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.05.2012, 17:20 | #1 |
Пользователь
Регистрация: 28.02.2010
Сообщений: 14
|
Socket'ы и Pthread'ы на C
Доброго времени суток
Подскажите, пожалуйста, ответ на вопрос. Ситуация следующая: Пишу чат на C (под Linux) на сокетах и тредах (pthread.h). Сервер создает сокет и слушает, как только к нему стучатся он делает accept (создается новый сокет) и создает тред , через который общается с клиентом (принимает от него сообщение, и отсылает полученное всем существующим клиентам.) Клиент же в свою очередь создает сокет, пытается приконектится к серверу (у него один сокет). После чего запускается тред, в котором он отправляет сообщения через один сокет, а основной поток слушает этот сокет. Вопрос следующий, может быть такое, что случится коллапс?) из-за того, что у меня 2 процесса в клиенте используют один сокет? или нужно создавать 2 сокета у клиента: на отправку и на прием сообщений (с соответствующими изменениями у сервера)? А может быть можно как-то по-хитрому справиться с ситуацией с помощью mutex? Заранее спасибо за ответ |
18.05.2012, 17:33 | #2 |
Форумчанин
Регистрация: 11.01.2012
Сообщений: 177
|
зачем клиенту несколько потоков? клиент коннектится к серверу и через этот коннект общается в сервером, ему больше ничего не нужно
progromore.i2p - первый русскоязычный портал программистов в скрытосети
|
18.05.2012, 17:49 | #3 |
Пользователь
Регистрация: 28.02.2010
Сообщений: 14
|
А как без потоков? разве процесс не висит пока не отправит сообщение, если натыкается на функцию send? прошу меня поправить, если это не так)
|
19.05.2012, 09:31 | #4 | |
Форумчанин
Регистрация: 11.01.2012
Сообщений: 177
|
Цитата:
если это особенно важно, то можно вынести отправку и получение данных в отдельный поток. но суть это не поменяет
progromore.i2p - первый русскоязычный портал программистов в скрытосети
|
|
19.05.2012, 21:21 | #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 |