Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2014, 22:28   #1
Deadstock
 
Регистрация: 11.02.2014
Сообщений: 7
Вопрос Чат с использованием протокола MSRP

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

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

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

Добавляю в список подключений Uri второго клиента из первого аргумента, если есть:
Код:
if (args.Length == 1)
              {
                  List<Uri> toPath = new List<Uri>();
                  toPath.Add(new Uri(args[0]));
                  activeSession.SetToPath(toPath);
...
Продолжение тела условия - соединяюсь со вторым клиентом через его Uri:
Код:
Session passiveSession = Session.Create(false, false, toPath[0], myAddress);
Отправляю текстовое сообщение:
Код:
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 (EndPoint endPointSnapshot, SocketAddres
s socketAddress)
в System.Net.Sockets.Socket.Connect(E ndPoint remoteEP)
в MSRP.Connection.AddEndPoint(Uri uri, InetAddress address)
в MSRP.Session.SetToPath(List`1 uris)
в MSRP_Protocol_Implementation.Progra m.Main(String[] args)

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

То есть у меня один "универсальный" клиент. Если на него не подаются входные параметры - он ждет подключений (наверно). Подается Uri - соединяется с ним. Ну это я так думаю. Очень нуждаюсь в помощи T_T
Вложения
Тип файла: rar MSRP Protocol Implementation.rar (273.8 Кб, 6 просмотров)
Deadstock вне форума Ответить с цитированием
Старый 14.02.2014, 11:19   #2
Deadstock
 
Регистрация: 11.02.2014
Сообщений: 7
Печаль

проверял на разных компьютерах и с разными сетями, с localhost тоже. все указывает на строку

Код:
activeSession.SetToPath(toPath);
и исключение: "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение 192.168.26.188:55383" с 127.0.0.1 клиентами, запущенными на одной машине - возникает та же ошибка

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

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

код уже новой программы:
Код:
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();
    }
}
Deadstock вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат с использованием разделяемой памяти Ubuntu. Cannibal Qt и кроссплатформенное программирование С/С++ 1 09.06.2013 20:56
Delphi.Игра, с использованием протокола Drag&Drop Zонька Помощь студентам 3 15.01.2013 20:36
Исследование протокола m1kx Безопасность, Шифрование 3 28.08.2012 12:53
Описание протокола maska228 Помощь студентам 0 12.06.2011 21:31
Разработка протокола OrdJONY Общие вопросы по программированию, компьютерный форум 2 04.10.2007 13:21