Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/45: Рейтинг темы: голосов - 45, средняя оценка - 4.78
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
1

Сетевой мессенджер

02.01.2010, 00:53. Просмотров 9372. Ответов 18
Метки нет (Все метки)

Делаю что-то типа аськи только локальных масштабов, использую классы TcpClient и TcpListerner.
И вот не знаю как луче сделать, открывать для каждого пользователя, который первый раз шлет мессадж, отдельный сетевой поток NetworkStream, и потом все время взаимодействовать с ним через этот поток. Или же открывать один и тот же поток каждый раз когда приходит сообщение, а по заголовку определять от кого.

Ах да, с новым годом форумчани
Желаю всем творческих успехов в новом году.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2010, 00:53
Ответы с готовыми решениями:

Мессенджер
В качестве темы для курсовой взял мессенджер, но он должен быть десктопным (требование к курсовой)....

Мессенджер в локальной сети
Здравствуйте. Я сейчас на 4 курсе, и вскоре буду проходить производственную практику, поэтому...

Мессенджер: можно ли обойтись без БД
Здравствуйте, я сейчас занимаюсь разработкой, пока что архитектуры, мессенджера. Я как-то слышал,...

IM мессенджер. Нужны советы по созданию
Хочу написать аналог аськи, естесно с более простым функционалом. Писать вроде надо используя...

18
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
02.01.2010, 04:09 2
На мой взгляд, лучше использовать класс Socket. Хотя схема практически не отличается для других классов передачи данных. Начинаете прослушивать порт, при входящем подключении получаете конечную точку и создаете новый thread-поток. Получается каждый поток обрабатывает по одному контакту. В потоке принимаете данные, обрабатываете и закрываете соединение, т.к. на сколько я помню, у операционной системы ограниченное число одновременно открытых соединений.
1
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
02.01.2010, 14:19  [ТС] 3
Какие преимущества у Socket над TcpClient? И что луче использовать?
1
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
02.01.2010, 16:32 4
Скажем, что все остальные классы построены на основе Socket. Они созданы для облегчения работы с конкретными протоколами. Socket дает больше свободы. Вы можете использовать собственно придуманный протокол с которым Вам будет удобнее работать. Он обрабатывает именно ваши данные не обрабатывая их. FTP-протокол не самый лучший из всех выбор для создания чата.
0
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
02.01.2010, 20:14  [ТС] 5
Эм.. я что-то не понял причем здесь ftp?
Разве обмен между tcpClient идет с использованием протокола ftp?
0
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
02.01.2010, 21:25 6
Прошу прощения. Был невнимателен. Показалось, ftp вместо tcp.

Добавлено через 1 час 0 минут
Я всегда пользуясь классом Socket для связи двух своих приложений.
0
Alligieri
CEO
Эксперт С++
2255 / 1245 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
02.01.2010, 23:52 7
Пишу в основном на основе TcpListener/TcpClient, использую вариант открытия потока - определение идентификатора клиента (выдается при первом подключении) - обработка данных - отправка ответа - закрытие потока. Такой вариант является экономичным по поводу ресурсов + прога редко слетает (не забывайте кстати обработать ексепшены, потому что при падении клиента или сервера у пользователей посыплются ошибки).
1
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
03.01.2010, 01:25 8
Только структура клиент-сервер не очень хорошо идет для локальной сети. Всё время где-то в сети должен быть запущен клиент и все обязаны знать где он.
1
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
03.01.2010, 20:37  [ТС] 9
Спасибо!.
Цитата Сообщение от body90 Посмотреть сообщение
Всё время где-то в сети должен быть запущен клиент и все обязаны знать где он.
Во... вот это я как раз хотел уточнить, как мне в сети находить мой сервер?
когда ip сервера не известен клиенту.
0
HIMen
4295 / 1463 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
03.01.2010, 21:01 10
Цитата Сообщение от Неумейка Посмотреть сообщение
Во... вот это я как раз хотел уточнить, как мне в сети находить мой сервер?
когда ip сервера не известен клиенту.
http://www.no-ip.com/
0
Тихомиров
10 / 10 / 4
Регистрация: 04.10.2009
Сообщений: 21
03.01.2010, 21:03 11
Для общения в сети лучше использовать протокол UDP.
Для поиска сервера используйте широковещательный запрос на который откликнется сервер.
1
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
03.01.2010, 21:46 12
Меня определили с ответом о широковещательной рассылке. Могу подкинуть код.
На счет no-ip - это не для вашего случая.
1
HIMen
4295 / 1463 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
03.01.2010, 22:00 13
Цитата Сообщение от body90 Посмотреть сообщение
На счет no-ip - это не для вашего случая.
Почему? 1 раз зарегистрирует хостнайм, пропишет его в клиенте и никакой ip узнавать не надо будет
0
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
04.01.2010, 02:07 14
Как я понял, создается приложение, работающее только в рамках локальной сети. А исходя из того, что требуется определить где находится сервер я подумал, что не будет определенного компьютера для сервера. Значит прийдется на каждом компьютере с сервером придется устанавливать еще и no-ip и всё настраивать. Всё можно быстрее организовать через широковещание (только не перестараться чтоб не положить сеть)
0
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
11.01.2010, 10:56  [ТС] 15
Цитата Сообщение от body90 Посмотреть сообщение
Могу подкинуть код.
Было бы не плохо
Для организации широковещательной рассылки можно использовать толко сокеты UDP?
0
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
11.01.2010, 16:19 16
да.
1
Вложения
Тип файла: rar C# как принять широковещательный пакет.rar (131.7 Кб, 97 просмотров)
Тип файла: rar SocketClass.rar (21.3 Кб, 86 просмотров)
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
12.01.2010, 04:05 17
Это работа с широковещательной рассылкой:
1
Вложения
Тип файла: rar AsincSocket.rar (20.7 Кб, 84 просмотров)
Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
14.01.2010, 17:50  [ТС] 18
Подскажите пожалуйста как используя udp получить ip отправителя данных?
Сделал так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            Socket lisnSocet = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, conPort);
            lisnSocet.Bind(ipep);
 
            byte[] buff = new byte[1024];
            EndPoint ip = (EndPoint)ipep;
            while (true)
            {
                int res = lisnSocet.ReceiveFrom(buff, ref ip);
                IPEndPoint end = (IPEndPoint)lisnSocet.RemoteEndPoint;
                ReadMessage(Encoding.Unicode.GetString(buff, 0, res), end.Address);
 
            }
ошибка: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied
в строке
C#
1
IPEndPoint end = (IPEndPoint)lisnSocet.RemoteEndPoint;
0
body90
372 / 305 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
15.01.2010, 20:23 19
Попробуйте так:
Определение IP из сокета
0
15.01.2010, 20:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 20:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Мессенджер
Короче, появилась у меня одна идея. Создать что-то типа своего мэссенджера. И так хочу сделать...

Мессенджер и БД
Здравствуйте, я сейчас занимаюсь разработкой, пока что архитектуры, мессенджера. Я как-то слышал,...

P2p мессенджер
Здравствуйте У меня такой вопрос, я на диплом рассматриваю такую тему, как создание мессенджера,...

Мессенджер на Android
Здравствуйте, и доброго времени суток, нужна ваша помощь. Дело вот в чем, дипломная работа -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.