Работа с Winsock, или как правильно написать чат.
От: Bers  
Дата: 05.03.02 21:21
Оценка:
Добрый день. Пишу сетевой чат, и по этому поводу возникли вопросы:
Имеем: сервер с рабочими потоками для каждого клиента, принимает фразы от клиента и посылает фразы других клиентов. Каждый поток как-то должен сообщать основному что есть новые данные, точно так же как и основной поток должен сообщать рабочим, что надо что-то отослать. Соотсветственно эти события независимы.Как это правильнее реализовать, т.е. каким способом, через таймер ли, TCP или UDP, блокирующие/неблокирующие вызовы?

На VC++6/MFC, Winsock.
Заранее спасибо за ответы.
Re: Работа с Winsock, или как правильно написать чат.
От: Tigor Россия  
Дата: 05.03.02 23:04
Оценка:
Здравствуйте Bers, Вы писали:

B>Добрый день. Пишу сетевой чат, и по этому поводу возникли вопросы:

B>Имеем: сервер с рабочими потоками для каждого клиента, принимает фразы от клиента и посылает фразы других клиентов. Каждый поток как-то должен сообщать основному что есть новые данные, точно так же как и основной поток должен сообщать рабочим, что надо что-то отослать. Соотсветственно эти события независимы.Как это правильнее реализовать, т.е. каким способом, через таймер ли, TCP или UDP, блокирующие/неблокирующие вызовы?

На правильность не претендую, но я бы делал так:
1. Использовал бы TCP (просто из-за надежности и удобства).
2. Работал бы с асинхронными сокетами, то есть обошелся бы максимум двумя потоками.
Один для пользовательского интерфейса приложения, другой для сообщений от winsock.
Большое количество потоков не всегда есть плюс, а головная боль с обеспечением их корректного взаимодействия точно будет.
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re: Работа с Winsock, или как правильно написать чат.
От: Eow  
Дата: 06.03.02 07:37
Оценка:
Здравствуйте Bers, Вы писали:

B>Добрый день. Пишу сетевой чат, и по этому поводу возникли вопросы:

B>Имеем: сервер с рабочими потоками для каждого клиента, принимает фразы от клиента и посылает фразы других клиентов. Каждый поток как-то должен сообщать основному что есть новые данные, точно так же как и основной поток должен сообщать рабочим, что надо что-то отослать. Соотсветственно эти события независимы.Как это правильнее реализовать, т.е. каким способом, через таймер ли, TCP или UDP, блокирующие/неблокирующие вызовы?

B>На VC++6/MFC, Winsock.

B>Заранее спасибо за ответы.

На сервере, для всех сокетов используй один поток.
Клиентские сокеты храни в списке. Соответственно в том же потоке эти
клиентские сокеты опрашивай, на предмет получения событий. Ну и дальше командуй ими.
А протокол тебе по барабану, используй любой. У тебя же не технологический процесс
на атомной станции. Хотя лучше TCP. C переконекчиванием будет меньше проблем.

Удачи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.