98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
||||||
Приложение мгновенного обмена сообщениями, как получить список друзей22.03.2012, 19:17. Показов 6825. Ответов 33
Метки нет Все метки)
(
Доброго времени суток!
Я работаю на C# всего нечего, но он меня заинтересовал... и я решил на тему дипломной программы выбрать "Приложение мгновенного обмена сообщениями" на C# (хочу реализовать что похожие на qip, mail agent, в лучшем случае по функциональности похожим на skype), потихоньку освоил сокеты и использую примеры из книжки "NET. Сетевое программирование для профессионалов" Асинхронное приложение сервер (так сказать взял его за основу и разрабатываю дальше). Очень трудно освоить =(, сейчас мне интересно как реализовать разрыв клиента к серверу, то есть после закрытия клиентом приложение, чтобы на сервере закрывался поток(сокет), у меня происходит ошибка на данной строчке
Так как там застрял я начал писать клиентскую часть, а если точнее взялся за оформление и тут тоже не могу найти решение, как реализовать список друзей/user list (чтобы было фото, имя, статус, ну еще что то) и так же диалоговое окно/окно обмена сообщениями (пробовал сделать с MDI формой, но как то не удачно, мало возможностей изменений интерфейса). В интернете я нашел много примеров изменения компонентов и форм, но почти везде используется рисование, что у меня вовсе не удается =(. Еще не могу не как придумать как лучше сделать, передачу данных о пользователе (фото, имя, ид, возраст, статус и тп), сохранение истории. Вобщем итоге у меня есть сервер к которому можно подключиться и авторизоваться. Все данные о пользователе я беру из БД MySql. Добавлено через 21 час 8 минут Оформление Listbox Вобщем решил сам нарисовать свой ListBox, нашел статью сделал все как там описано (в плане рисование компоненты), но вышло как то не удачно (исходник залил) Не могу понять по какой причине увеличивается размер изображения, оно имеет размер 48х48, а при добавления записи ее размер увеличивается и выходит за рамки дозволенного. Так же в том исходнике указан пример с тем что там всегда одно изображение, а мне нужно чтобы у каждого значение было свое изображение (будет загружаться с сервера). + ко всему при добавление записи в мою компоненту создается ошибка... как объяснить ее даже не знаю, посмотрите в исходнике. Tabcontrol Так как с MDI не получается сделать диалоговое окно решил использовать Tabcontrol, первым делом нашел такую чтобы была возможность закрыть вкладку. Тут. Возникло сразу 2 вопроса каким образом поменять цвет шапки и внутренностей. Так же не могу реализовать чтобы при нажатии на элемент, из списка Listbox, открывалось окно где есть контрол и в ней одна вкладка с двумя Rich или Textbox'ами, button кнопкой отправки, menustrip, picturebox. И при последующем нажатии другого элемента, из списка Listbox, открывалось та же форма с тем же контролом, но просто добавил новая вкладка с тем же компонентами. И еще на счет сервера не кто не знает? (описано в посте выше)
0
|
22.03.2012, 19:17 | |
Ответы с готовыми решениями:
33
Программа для мгновенного обмена сообщениями Приложение для обмена сообщениями Как получить список друзей вк |
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
23.03.2012, 15:35 [ТС] | |||||||||||
Доброго времени!
Нужна ваша помощь. Решил пока оставить рисование компонентов и вернулся к MDI контейнеру, возникла идея сделать не диалоговое окно (сообщений) как в mail-agente или qip, с делать что то похожие на скайп, идея в принципе удалась, но есть мелочи которые я не могу не как решить, я для начало опишу что решил сделать ![]() Во первых, немогу убрать стандартные кнопки с form2 (закрыть, свернуть, и тп), а также иконку, с тем учетом что Form2 имеет FormBorderStyle = None; Во вторых, у меня немного свой дизайн (в плане что я не хочу сделать его примитивным windows приложением), и по краем вылазит не нужные лини, что портит всю картину; В третьих, когда я вызываю Form2, как я сказал ранее форма "во весь экран", она переходит за menustrip и menustrip ее закрывает
На скриншоте я изобразил, первые две ошибки (я не стал форму подгонять под стиль, так как пока просто экспериментирую). ЗЫ: так же я решил для отображения списка друзей использовать listview и imagelist, думаю это будет даже как то лучше выглядеть, точнее надеюсь ![]()
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
23.03.2012, 16:24 | |
1. Реализуй на сервере класс-пользователь и лист этих классов, который заполняется по мере подключения пользователей. и функцию, которая возвращает открытые данные по всем пользователям.
2. для иконки аналогично есть поле-свойство
1
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|
23.03.2012, 16:43 [ТС] | |
Да спасибо, там иконка сразу исчезает с этим свойством, а как сделать чтобы с низу это рамка исчезла?
нет это позже, я имею ввиду как с сервера/клиента передать простым путем данные? допустим для авторизации я сделал так, что пользователь вбивает логин и пароль, они сохраняются в строку с двумя спец символами, один символ оповещает сервер что это авторизацию (&), а второй говорит о том где кончается логин и начинается пароль (|), &login|password. если все сделать таким образом это довольно таки не выгодно, слишком много циклов распознавания сообщения от клиента/сервера, что ведет к длительным обработкам.
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
23.03.2012, 16:54 | |
создай свой класс - пакет
один из параметров - тип запроса(подключение, сообщение, отключение и т.д.) применяешь к своему классу xml(для html протокола) или бинарную сериализацую(для любого протокола) - получаешь на сервере пакет данных, десириализуешь, обрабатываешь внутри класа-пакета можно реализовать шифрование данных.
1
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
23.03.2012, 18:50 | ||||||
Бинарная сериализация что делать на сервере думаю разберешься
2
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|
23.03.2012, 20:25 [ТС] | |
Извините что задаю столько вопросов...
С сериализацией я вроде разобрался ,частично, но возник вопрос как использовать переменные одного класса в другом? и таким же образом возможно передавать изображения? И еще возник вопрос со списком друзей, изначально я себе представлял что в таблице(юзеров) бд будет поле "friend_list", в котором будет перечислены id или логины пользователей, что находятся в друзьях, через ";", когда пользователь проходит авторизацию, ему передавались все свои данные ( "login, user_id, user_pass, user_mail, user_year, user_name, user_surname, user_photo, friend_list), после чего запускать запрос на сервер о получение данных на каждого друга/пользователя... И подобным образом отправлять сообщения, "id/login | сообщение/звонок/картинку/данные..." Да и вобще я один могу реализовать такой проект в течение месяца-двух или же надо будет отбросить некоторые функции программы?
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
24.03.2012, 12:36 | |
умеючи для локальной сети чатик можно за неделю сделать.
чтоб передавать изображения добавь в класс-пакет поле - массив байт. про список друзей я тебе говорил выше: создаешь класс на сервере напр. User, который хранит инфу о пользователе( в том числе его сокет) создаешь List<User> пользователей и при подключении добавляешь в этот лист нового пользователя. при запросе на список онлайн - делаешь выборку из твоего List<User> на сервере тех кто находится в списке друзей запросившего пользователя, или просто весь список, если у тебя чат. если на сервер приходит сообщения для пользователя с таким-то логином просто находишь его в листе и отправляешь на его сокет сообщение и т.д. хотя еще лучше будет хранить инфу о пользователе на сервере и при авторизации брать данные с сервера, а не от пользователя
1
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
27.03.2012, 19:27 [ТС] | |||||||||||
Добавлено через 21 минуту Вобщем запутался, как преобразовать полученный байт в поток памяти, от туда в переменные класса ? Добавлено через 5 часов 36 минут так я сериализую на клиенте Добавлено через 3 часа 11 минут И тут тоже разобрался, надо было создать библиотеку класса, который я сереализовал, и добавить в обе программы... На клиентской части я использую notifyicon, когда я вызываю окно авторизацию, заполняю данные, жму кнопку Login у меня появляется еще одно иконка в трее и так при каждой нажатии клавиши Login. Как решить эту проблему? Добавлено через 11 часов 57 минут Кто подскажет что не так, пользователь проходит авторизацию если все верно ему возвращается класс MySend(type, message) и на форме должно поменяться название, типо "Chat - Login", а у меня остается "Chat - Chat", может я отправляю не так данные? Сервер
0
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
||||||
30.03.2012, 19:03 [ТС] | ||||||
Может кто скинуть пример асинхороного клиента?
Второй день не могу разобраться с примером из книги NET. Сетевое программирование для профессионалов. Добавлено через 22 часа 58 минут Клиент отправляет одно сообщение и закрывает в чем проблема?
up up хелп!!!
0
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
09.04.2012, 22:47 [ТС] | |||||||||||
Помогите разобраться не чо не пойму
На сервер с клиента приходит сообщение с логином и паролем, сервер принимает вывод в консоль сообщение о том что логин и пароль верные и тут я незнаю что не так, либо сервер не отсылает сообщение, либо клиент тупит Сервер
UP UP очень нужна помощь ![]()
0
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|
14.04.2012, 00:41 [ТС] | |
Объяснит может кто почему в сериалезованном классе.строке если написать на русском приходят всякие ?????????, а если цифры или на английском то все норм приходит?
Добавлено через 52 минуты и еще подскажите как работать из под класса, то есть у меня есть класс все функции записаны в нем и там есть условие вызова формы, так когда я ее вызываю она у меня просто как зависшая, не могу предпринять ни каких действий =/
0
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
17.04.2012, 12:13 [ТС] | |||||||||||
Когда я закрываю клиентскую часть на сервер должно приходить сообщение об этом, но почему то не приходит =/
0
|
![]() 1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
||||||
17.04.2012, 13:47 | ||||||
когда сокет правильно закрывается на другой конец отправляется сообщение об этом
достаточно обработать кол-во принятых байт на сервере
1
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
17.04.2012, 15:34 [ТС] | |||||||||||
Ну я так пробовал, но выходили кучу ошибок, самая частая "клиент разорвал с вами соединение" что такое... но решил еще раз попробовать, на клиенте добавил отправку двух сообщений и дал время ожидания между ними Thread.Sleep(100);
0
|
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
||||||
20.04.2012, 16:26 [ТС] | ||||||
Почему то клиент не может приконектится к серверу с другого ПК после того как изменился IP, на сервер приходит сообщение о том что он пытается подключится, но не может. Как решить проблему?
0
|
![]() 1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
20.04.2012, 17:13 | |
ясен пень никто не присоединится если изменился адрес сервера
на то он и называется сервер - у него всегда один IP
0
|
20.04.2012, 17:13 | |
Помогаю со студенческими работами здесь
20
Как получить список друзей Вконтакте Vk API, как получить список друзей? Создать клиент/серверное сетевое приложение для обмена текстовыми сообщениями
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
|
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
|
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
|
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
|
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
|
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
|
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
|
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
|
Verilog и интеллектуальная собственность - "глазами" обученной LM модели.
Hrethgir 17.04.2025
В сети встречаются участники, заявляющие что код на Verilog ни о чём не говорит. Но вот патентная практика на самом деле показывает обратное ими утверждаемому.
То-есть код на Verilog включают в. . .
|
Свап-файл дополнительно к разделу (если вдруг не хватает или не создан)
jigi33 17.04.2025
ПОДКЛЮЧЕНИЕ ДОПОЛНИТЕЛЬНОГО SWAP ПРОСТРАНСТВА, Т. О. , РАСШИРЕНИЕ ЕГО РАЗМЕРА
В Linux можно использовать как раздел подкачки (swap), так и файл подкачки (swap-файл). Чтобы создать swap-файл вместо. . .
|