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


Автор: ad12 18.9.2010, 10:42
Добрый день.
Есть небольшая локальная сеть.
На каждой рабочей станции загружается приложение WPF.
Нужно организовать обмен короткими сообщениями между этими приложениями.
Чтобы сообщение, адресованное конкретной рабочей станции, попадало в соответствующий управляющий элемент на интерфейсе приложения.

Как такое сделать? Кто-нибудь знает?
 smile 

Автор: WolfTheGrey 18.9.2010, 13:15
знаем, но эта тема на докторскую диссертацию тянет smile

Автор: Kaerus 18.9.2010, 16:07
Ты бы хотя бы уточнил 
1) как машины будут обмениваться сообщениями (сокеты, WCF, пайпы или чего еще)
2) что значит "сообщение, адресованное конкретной рабочей станции"

 а то так получается что ты хочешь что-то типа "Magic Remote Binding"

А то что у тебя лок. сеть это вообще ничего не меняет, в локалке так-же сеть может отвалиться на любой машине

Автор: WolfTheGrey 19.9.2010, 00:15
Kaerus, афтор имеет в виду приложение вроже маленького чата, где месаги летят не всем пользователя а конкретному лицу, типо привата.
Такое организовать возможно при помоши UDP протокола и фильтрации адресованого покета.

Осталось узнать в каком виде афтор желает сей девайс видеть. или вид девайса автор сам напишет?

Автор: Kaerus 19.9.2010, 01:29
WolfTheGrey
Зачем же тогда такой акцент на "попадало в соответствующий управляющий элемент на интерфейсе приложения" и если уж тема в разделе "WPF & Silverlight" я думаю автора интересует нечто большее чем обмен данными по UDP

В общем хотелось бы, от автора услышать пояснения

Автор: WolfTheGrey 19.9.2010, 05:45
акцент на "попадало в соответствующий управляющий элемент на интерфейсе приложения"
я так думаю это и есть общение в приват, чтоб сообщение мог прочитать только избранный. 

Автор: Exai1e 19.9.2010, 11:03
http://www.progblog.ru/Posts/WCF-Chat

можно сделать и с использованием обычных сокетов, только потребуется сервер, который будет принимать подключения/сообщения и отсылать их адресату

Автор: ad12 19.9.2010, 14:58
Спасибо всем, что откликнулись.
Дело в том, что в сетевых приложениях я не силён.
Нужно ли тут клиент-серверная архитектура? 
Т.е. надо ли писать и клиентскую и серверную часть?
Где тут копать?

И если это тянет на докторскую - может, взять какой-нибудь готовый чат.
Только как его интегрировать с моим?
Чтоб всё происходило внутри моего WPF- интерфейса.

Т.е. давлю кнопку на интерфейсе, в окошко набираю короткое сообщение, выбираю адрес, OK, и оно всплыло у адресата.

Вот.

Автор: WolfTheGrey 19.9.2010, 16:00
Нужно ли тут клиент-серверная архитектура?
Т.е. надо ли писать и клиентскую и серверную часть?

Сервер нужен, по другому ни как. Да и если клиента не будет в сети то, можно задержать отправку сообщения на сервере.
а вообще тебе надо сюда:http://forum.vingrad.ru/forum/dotnet-distributed-network-net-app-csharp.html

Автор: ad12 19.9.2010, 18:09
А если с каждой рабочей станции отправлять пакет с сообщением в сеть,
он разлетается по сети, а на каждом приложении на раб.станциях висит программа слушатель-перехватчик, она
проверяет адрес, и если адрес его - принимает сообщение, если нет - игнорирует...

Автор: Exai1e 19.9.2010, 20:26
можешь сделать так - есть программа сервер, в ее задачу входит принимать подключения, и принимать сообщения. когда ты отсылаешь серверу текст для какой либо машины "маркинуеш" его "меткой" для кого именно это сообщение предназначено, это может быть и строка "|CompName|Message|" которую будешь парсить на сервере, получая из нее "CompName" и именно этому компьютеру в итоге отсылать данные из части строки "Message". Это может быть сериализованный объект (что удобнее), это может быть WCF сервис реализующий Callback. Надо выбирать технологию и/или методы решения проблемы исходя из задачи.
Цитата

Чтоб всё происходило внутри моего WPF- интерфейса.

интерфес вообще не важен, это может быть хоть консольная апликуха, хоть WinForms хоть WPF, для начала реализуй логику приложения (общение между сервером и клиентами) а уж то что сделаешь, сможешь прикрутить к любому GUI

Автор: ad12 21.9.2010, 13:44
А если вот так (попроще):
На сервере есть расшаренная папка.
Приложение на рабочей станции кладёт в эту папку сообщение с меткой кому.
В то же время на каждой раб.станции висит модуль, который периодически опрашивает эту папку
на наличие адресованных этой станции сообщений.
Если есть, он его читает и удаляет файл.
И всё  smile 

Автор: Exai1e 21.9.2010, 14:51
ad12, раз есть "сервер с папкой" то зачем нужна папка, если можно написать простенький "сервер" в виде по (хоть консольное приложение, которое будет висеть в фоне и делать свою работу), которое будет хранить ваше сообщения и отсылать их подключившимся клиентам. достаточно обычных сокетов. (system.net.sockets) 
если сообщения это обычные string объекты

Код

есть программа сервер, в ее задачу входит принимать подключения, и принимать сообщения. когда ты отсылаешь серверу текст для какой либо машины "маркинуеш" его "меткой" для кого именно это сообщение предназначено, это может быть и строка "|CompName|Message|" которую будешь парсить на сервере, получая из нее "CompName" и именно этому компьютеру в итоге отсылать данные из части строки "Message".


compname - пусть это хоть IP адрес, хоть логин по которому будут подключатся клиенты к серверу, да что угодно) главное для себя это решить smile

зы. постоянно "читать" папку с файлами на наличие новых сообщений - не лучшее решение, имхо
зыы. толи у меня так отображается, толи не знаю - все сообщение идет как большая цитата

Автор: ad12 21.9.2010, 15:46
Спасибо, Exai1e.

А можно, если нетрудно, немножко C# кода простенького сервера.
(Я никогда не писал серверных приложений  smile )

Автор: Exai1e 21.9.2010, 17:00
ad12, в интернете довольно много разнообразных примеров, как для совсем начинающих с подробностями так и более "продвинутые"
попробуйте поискать по словами C# Sockets, System.Net.Sockets, Чат C# Сокеты и т.д.
например вот, общий пример
http://www.xndcrew.org/?module=articles&c=articles&b=2&a=12
http://wincode.org/programming/soketi-v-net-sozdanie-chata/
ну и т.д.

Автор: userdab 22.9.2010, 18:38
http://social.msdn.microsoft.com/Forums/ru-RU/csharpru/thread/48fe63d9-480f-4f29-b98d-ec5f5f720f3d и еще http://www.microsoft.com/Rus/Msdn/Magazine/2005/08/Winsock.mspx

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