Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 11.02.2014
Сообщений: 5
.NET 4.x

Чат с использованием протокола MSRP

13.02.2014, 22:19. Показов 1186. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер, появилась необходимость создать приложение на основе готового открытого протокола для обмена мгновенными сообщениями. На глаза попался с первого взгляда подходящий протокол MSRP. Нашел его свободную открытую реализацию на шарпе с хорошим руководством. Собрал все библиотеки, подключил.

Вот что я делаю (как я думаю):

Получаю адрес клиента:
C#
1
2
 String myHost = System.Net.Dns.GetHostName();
            String ipAdress = System.Net.Dns.GetHostByName(myHost).AddressList[0].ToString();
Создаю адрес уже специального типа:
C#
1
InetAddress myAddress = new InetAddress(ipAdress);
Создаю активную сессию:
C#
1
Session activeSession = Session.Create(false, false, myAddress);
Получаю локальный Uri:
C#
1
Uri myMsrpUri = activeSession.Uri;
Uri выглядит примерно так - msrp://127.0.0.1:49205/0oL8N081;tcp

Добавляю в список подключений Uri второго клиента из первого аргумента, если есть:
C#
1
2
3
4
5
6
 if (args.Length == 1)
              {
                  List<Uri> toPath = new List<Uri>();
                  toPath.Add(new Uri(args[0]));
                  activeSession.SetToPath(toPath);
...
Продолжение тела условия - соединяюсь со вторым клиентом через его Uri:
C#
1
Session passiveSession = Session.Create(false, false, toPath[0], myAddress);
Отправляю текстовое сообщение:
C#
1
Message sendMsg = activeSession.SendMessage("text/plain", "Hello world\n".Encode(Encoding.UTF8));
В итоге все останавливается на соединении со вторым клиентом и выводится ошибка:
Запуск клиента MSRP
...
Установлена сессия для 192.168.0.100
Ваш Uri: msrp://192.168.0.100:49609/0lVkGFho;tcp

Необработанное исключение: System.Net.Sockets.SocketException: Подключение не ус
тановлено, т.к. конечный компьютер отверг запрос на подключение 94.181.114.97:55
437
в System.Net.Sockets.Socket.DoConnect(EndP oint endPointSnapshot, SocketAddres
s socketAddress)
в System.Net.Sockets.Socket.Connect(EndPoi nt remoteEP)
в MSRP.Connection.AddEndPoint(Uri uri, InetAddress address)
в MSRP.Session.SetToPath(List`1 uris)
в MSRP_Protocol_Implementation.Program.Mai n(String[] args)

Вот отсюда брал библиотеки и короткий Tutorial, по которому делал LINK

То есть у меня один "универсальный" клиент. Если на него не подаются входные параметры - он ждет подключений (наверно). Подается Uri - соединяется с ним. Ну это я так думаю. Очень нуждаюсь в помощи T_T
Вложения
Тип файла: rar MSRP Protocol Implementation.rar (273.8 Кб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.02.2014, 22:19
Ответы с готовыми решениями:

Чат, с использованием протокола UDP
Нашел чат вот он: http://www.interestprograms.ru/sources/csharp/ishodnik-setevoy-programmy-protokol-udp-p2.html Подскажите пожалуйста как...

Сервер простого чат-протокола
Доброго времени суток) Нужна помощь в создании сервера простого чат-протокола - образец если кто-то уже писал такой. Сервер принимает...

Анонимный чат [Реализация протокола обмена сообщениями]
Здравствуйте, появилось желание сделать анонимный чат. И уже в начале появились трудности. Как зарегистрировать участника после нажатия...

2
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.02.2014, 00:32
Deadstock, попробуйте просто к сокету подключиться, может там с портами проблема, а с библиотекой все правильно делаете?..
0
0 / 0 / 1
Регистрация: 11.02.2014
Сообщений: 5
14.02.2014, 11:14  [ТС]
проверял на разных компьютерах и с разными сетями, с localhost тоже. все указывает на строку
Code
1
activeSession.SetToPath(toPath);
и исключение: "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 192.168.26.188:55383"
с 127.0.0.1 клиентами, запущенными на одной машине - возникает та же ошибка

делал все по официальному туториалу по билиотеке, он очень короткий, ссылка в предыдущем сообщении

пробовал различные последовательности создания сессий, соединений, все работает до момента с SetToPath

код уже новой программы:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MSRP;
using MSRP.Java;
using MSRP.Utils;
 
 
 
namespace MSRPImp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public Session activeSession;
        public List<Uri> toPath = new List<Uri>();
        public InetAddress myAddress;
        public Session passiveSession;
 
        private void button1_Click(object sender, EventArgs e)
        {
            String myHost = System.Net.Dns.GetHostName();
            String ipadress = System.Net.Dns.GetHostByName(myHost).AddressList[0].ToString();
 
            myAddress = new InetAddress(ipadress);
 
            activeSession = Session.Create(false, false, myAddress);
            Uri myMsrpUri = activeSession.Uri;
 
            richTextBox1.Text += "\n Active Session Initialised";
            textBox1.Text = myMsrpUri.ToString();
 
 
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            
            toPath.Add(new Uri(textBox2.Text));
            toPath[0] = new Uri(textBox2.Text);
            richTextBox1.Text += "\n Partner Client Added";
            passiveSession = Session.Create(false, false, toPath[0], myAddress);
      
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            activeSession.SendMessage("text/plain", "Hello world\n".Encode(Encoding.UTF8));
            passiveSession.SendMessage("text/plain", "Hello world\n".Encode(Encoding.UTF8));
            activeSession.SetToPath(toPath);
 
            richTextBox1.Text += "\n Message Sent";
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
 
            Application.Exit();
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            IMSRPSessionListener listener = new MyListener();
            activeSession.AddListener(listener);
            richTextBox1.Text += "\n Active Listener has been just created";
            passiveSession.AddListener(listener);
            richTextBox1.Text += "\n Passive Listener has been just created";
 
            activeSession.SendMessage("text/plain", "Hello world\n".Encode(Encoding.UTF8));
            passiveSession.SendMessage("text/plain", "Hello world\n".Encode(Encoding.UTF8));
 
            richTextBox1.Text += "\n Message Sent";
        
        }
    }
}
 
public class MyListener : IMSRPSessionListener
{
    public bool AcceptHook(Session session, IncomingMessage message)
    {
        MemoryDataContainer mdc = new MemoryDataContainer((int)message.Size);
        message.DataContainer = mdc;
        return true;
    }
 
    public void ReceiveMessage(Session session, MSRP.Message message)
    {
        MessageBox.Show(message.Content.ToString());
    }
 
    public void ReceivedNickname(Session session, Transaction request)
    {
        throw new NotImplementedException();
    }
 
    public void ReceivedReport(Session session, Transaction report)
    {
        throw new NotImplementedException();
    }
 
    public void ReceivedNickNameResult(Session session, TransactionResponse result)
    {
        throw new NotImplementedException();
    }
 
    public void AbortedMessageEvent(MSRP.Events.MessageAbortedEvent abortEvent)
    {
        throw new NotImplementedException();
    }
 
    public void UpdateSendStatus(Session session, MSRP.Message message, long numberBytesSent)
    {
        throw new NotImplementedException();
    }
 
    public void ConnectionLost(Session session, Exception cause)
    {
        throw new NotImplementedException();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2014, 11:14
Помогаю со студенческими работами здесь

Как оптимальнее реализовать чат - в плане сетевого протокола есть пару идей
Есть мысля сделать чат, + кое какой там функционал еще кроме обмена текстом .. для курсовой Сначала задумался над архитектурой...

Резервирование связей с использованием RIP протокола
Немного не понимаю как именно в своей сети которую конструирую для курсача с помощью RIP протокола создать резервную связь и потом...

Передача данных с использованием протокола UDP
Всем добра. Владею вб и пхп на хорошо. Но не очень дружу с сшарп. Нужен самый простой пример отправки данных в виде текста на другой...

Игра, с использованием протокола Drag&Drop
Необходимо реализовать игру: На панели находятся N шаров, число которых вводит пользователь. Шары белого или черного цвета. Цель игры - ...

Клиент-сервер с использованием SSL/TLS протокола (QSslSocket)
День добрый! Задача: написать клиент сервер, использующий протокол TLS. Знаю что реализуется с помощью класса QSslSocket, но...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru