Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 17:20   #1
Angriff
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 14
Восклицание Socket'ы и Pthread'ы на C

Доброго времени суток

Подскажите, пожалуйста, ответ на вопрос. Ситуация следующая:

Пишу чат на C (под Linux) на сокетах и тредах (pthread.h).
Сервер создает сокет и слушает, как только к нему стучатся он делает accept (создается новый сокет) и создает тред , через который общается с клиентом (принимает от него сообщение, и отсылает полученное всем существующим клиентам.)
Клиент же в свою очередь создает сокет, пытается приконектится к серверу (у него один сокет). После чего запускается тред, в котором он отправляет сообщения через один сокет, а основной поток слушает этот сокет.
Вопрос следующий, может быть такое, что случится коллапс?) из-за того, что у меня 2 процесса в клиенте используют один сокет? или нужно создавать 2 сокета у клиента: на отправку и на прием сообщений (с соответствующими изменениями у сервера)?
А может быть можно как-то по-хитрому справиться с ситуацией с помощью mutex?

Заранее спасибо за ответ
Angriff вне форума Ответить с цитированием
Старый 18.05.2012, 17:33   #2
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

зачем клиенту несколько потоков? клиент коннектится к серверу и через этот коннект общается в сервером, ему больше ничего не нужно
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 18.05.2012, 17:49   #3
Angriff
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 14
По умолчанию

А как без потоков? разве процесс не висит пока не отправит сообщение, если натыкается на функцию send? прошу меня поправить, если это не так)
Angriff вне форума Ответить с цитированием
Старый 19.05.2012, 09:31   #4
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Angriff Посмотреть сообщение
А как без потоков? разве процесс не висит пока не отправит сообщение, если натыкается на функцию send? прошу меня поправить, если это не так)
клиенту достаточно одного потока и одного коннекта. входящие данные можно проверять функцией select 3-4 раза в секунду и ничего висеть не будет.

Цитата:
Сообщение от Angriff Посмотреть сообщение
если натыкается на функцию send?
если это особенно важно, то можно вынести отправку и получение данных в отдельный поток. но суть это не поменяет
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 19.05.2012, 21:21   #5
Dizelektwo
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 56
По умолчанию

Твоя проблема по большому счету подобна моей. Единственное весомое отличие- я работаю не под пингвином.

сервер, (1 процесс)
Далее создаешь поток клиента и передаешь 'сокет' в параметре. Ну и все, останется только довести все это до ума, т.е сделать сокет в потоке неблокирующим. Что бы можно было параллельно получать и отправлять данные. Не было ступенчатости как в моем случае - сервер- клиент-сервер-клиент, а было, к примеру сервер-сервер-сервер,клиент,сервер
Dizelektwo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос серверу на передачу файла клиенту (Socket'ы) Nibelim C++ Builder 1 13.03.2012 09:12
Socket'ы Mu$T@nG Помощь студентам 4 19.07.2010 20:58