Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Помогите сконструировать клиент-сервер приложение


Автор: drdoom 2.6.2009, 09:49
Здравствуйте знатоки сетевого программирования. Нужно сконуструировать клиент серверное приложение, потому как я не уверен как правильно должна выглядеть его структура.
Постановка задачи:
1 сервер с возможностью соединяться с кучей клиентский приложений одновременно.
я научился пользоваться классами TCPClient и TCPLister. как я понял листенер работает получая входящее соединение и создает клиент для отправки ответа.
так вот получается, что сервер, по собвственно инциативе не может отправить сообщение любому клиенту, только ответить на его сообщение. отсюда несколько вопросов.
1. Как научить сервер посылать в любой момент сообщения клиентам.(Придется ли создавать слушатель в каждом экземпляре приложения клиента?)
2. Как организовать соединение по типу icq?, то есть чтобы на сервере были показаны все клиенты запущенные в данный момент в сети.(Стоит ли заводить таймер в каждом клиенте и каждые несколько секунд отправлять подтверждения о расположения в сети)
3. Как реализовать чат допустим, не приватный а обший?(То есть я так понял клиент посылает сообщения на сервер, а тот рассылает всем остальным это сообщение. Как это сделать? или можно ли сделать правильнее?)
Заранее спасибо за помощь. 

Автор: DVariuS 2.6.2009, 10:10
drdoom, выбирай:
http://www.codeproject.com/KB/IP/PrismServer.aspx
http://www.codeproject.com/KB/IP/ykw1.aspx
http://www.codeproject.com/KB/IP/ChatAsynchTCPSockets.aspx
http://www.codeproject.com/KB/IP/TCPIPChat.aspx

Автор: drdoom 2.6.2009, 10:30
спасиб, чет на кодпроджекте не догодался поисать, я просто хотел сам написать, но наверн так будет даже лучше более менее нормальный код хоть.

Автор: DVariuS 2.6.2009, 10:37
drdoom, а я и не призываю использовать готовый код  smile Посмотри как сделано в простых проектах и, при желании, добавь функционала из более сложных.

Автор: drdoom 2.6.2009, 11:46
Чета я посмотрел проекты) не совсем подходят для реализации, не могли подсказать просто структуры всмысле листенеры клиенты как расположить на клиенте и сервере

Автор: drdoom 2.6.2009, 12:08
да в том то и дело что в саомо простом проекте как то лево сделано
там главная форма запушена как диалог, а форма она не работает, а с диалогом все время орет) думаю эт не лучший варинат, не можешь мне сказать как в принципе по правильному реализуется посылка сообщений с сервера клиентам? с созданием листенера у клиента?

Добавлено через 1 минуту и 3 секунды
Мне  вообще в принципе чат не нада делать, нужно просто чтобы сервер знал кто в сети есть и посылать команды клиентам

Автор: DVariuS 3.6.2009, 22:53
Цитата(drdoom @  2.6.2009,  12:08 Найти цитируемый пост)
да в том то и дело что в саомо простом проекте как то лево сделано
там главная форма запушена как диалог, а форма она не работает, а с диалогом все время орет) думаю эт не лучший варинат, не можешь мне сказать как в принципе по правильному реализуется посылка сообщений с сервера клиентам? с созданием листенера у клиента?

Все там нормально сделано, единственное, следует закомментировать следующую строку кода:
Код

txtLog.Text += msgToSend.strMessage + "\r\n";

т.к. в ней попытка обращения к элементу формы из другого потока - из-за этого постоянно exception вылетает.


Цитата(drdoom @  2.6.2009,  12:08 Найти цитируемый пост)
Мне  вообще в принципе чат не нада делать, нужно просто чтобы сервер знал кто в сети есть и посылать команды клиентам

Задачи аналогичны. Сервак слушает порт - ждет подключений клиентов, при удачном подключении заносит клиента в список активных. Периодически сервер посылает клиентам контрольный пакет и ждет ответ, чтобы убедиться, что клиент доступен. Клиент, в свою очередь, тоже слушает порт и ждет данных от сервера.
По поводу конкретной реализации - в тех примерах, ссылки на которые я привел, есть все необходимое   smile 

Автор: drdoom 4.6.2009, 13:49
ПАсиб я уже написал, не знал что можно просто сохранить клиент сокета и обратно данные ему послать в любоое время

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)