Question

Je viens de télécharger la bibliothèque MSNP-Sharp dans le but de créer mon propre client de messagerie, mais je me bats pour obtenir l'exemple pour vous connecter. Le code tous les compile, et fonctionne, mais quand je donne mes informations de connexion et sélectionnez « Connexion » J'ai presque immédiatement le SocketException suivant:

  

« Aucune connexion n'a pu être établie car la machine cible activement refusé 64.4.9.254:1863 »

Je l'ai fait un pas dans le code et c'est la fonction messenger.Connect () qui est à l'origine cela, évidemment un peu. Quand je lance l'exemple que je change que les informations de connexion et mot de passe. Je suis sous Windows 7 x86 avec la dernière version de Windows Live Messenger.

Je l'ai essayé de désactiver mon antivirus, allant même jusqu'à temporairement le désinstaller dans le cas où est l'erreur.

J'ai également essayé de désactiver le pare-feu de Windows, avec pas de chance.

Pas de solution correcte

Autres conseils

Tout d'abord, utilisez la version stable de MSNPSharp (qui est, 3.0). Comme il est SocketException, cela peut se rapporter à un problème dans le protocole Internet (un pare-feu par exemple). Essayez de vous assurer que rien ne bloque le programme d'accéder au protocole MSN. Puisque vous avez dit que vous avez désactivé votre pare-feu Windows, pourrait-il être autre chose qui pourrait être le bloquer?

Deuxièmement, avez-vous essayé d'utiliser MSN Live Messenger pour un test. Si cela fonctionne, le client MSNPSharp devrait probablement travailler aussi. Assurez-vous que vous avez .NET Framework 2.0 ou dans leur version du .NET Framework. S'il semble constamment être un problème, je ne crois pas que ce soit un problème du client MSNPSharp (je ne suis pas sûr cependant).

Voici une démo, je l'espère, il serait utile

  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Drawing.Color;

  namespace MSNRobot
  {
    using MSNPSharp;
    using MSNPSharp.Core;
    using MSNPSharp.DataTransfer;

    class RobotConversation
    {
        private Conversation _conversation = null;
        private RobotMain _robotmain = null;

        public RobotConversation(Conversation conv, RobotMain robotmain)
        {
            Console.WriteLine("==> Struct a conversation");
            _conversation = conv;
            _conversation.Switchboard.TextMessageReceived += new EventHandler<TextMessageEventArgs>(Switchboard_TextMessageReceived);
            _conversation.Switchboard.SessionClosed += new EventHandler<EventArgs>(Switchboard_SessionClosed);
            _conversation.Switchboard.ContactLeft += new EventHandler<ContactEventArgs>(Switchboard_ContactLeft);
            _robotmain = robotmain;
        }

        //online status
        private void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
        {
            Console.WriteLine("==>Received Msg From " + e.Sender.Mail + " Content:\n" + e.Message.Text);

            //echo back ///////////// TODO /////////////////
            _conversation.Switchboard.SendTextMessage(e.Message);
        }

        private void Switchboard_SessionClosed(object sender, EventArgs e)
        {
            Console.WriteLine("==>Session Closed, Remove conversation");
            _conversation.Switchboard.Close();
            _conversation = null;
            _robotmain.RobotConvlist.Remove(this);
        }

        private void Switchboard_ContactLeft(object sender, ContactEventArgs e)
        {
            Console.WriteLine("==>Contact Left.");
        }
    }

    class RobotMain
    {
        private Messenger messenger = new Messenger();
        private List<RobotConversation> _convs = new List<RobotConversation>(0);

        public RobotMain()
        {
            messenger.NameserverProcessor.ConnectionEstablished += new EventHandler<EventArgs>(NameserverProcessor_ConnectionEstablished);
            messenger.Nameserver.SignedIn += new EventHandler<EventArgs>(Nameserver_SignedIn);
            messenger.Nameserver.SignedOff += new EventHandler<SignedOffEventArgs>(Nameserver_SignedOff);
            messenger.NameserverProcessor.ConnectingException += new EventHandler<ExceptionEventArgs>(NameserverProcessor_ConnectingException);
            messenger.Nameserver.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Nameserver_ExceptionOccurred);
            messenger.Nameserver.AuthenticationError += new EventHandler<ExceptionEventArgs>(Nameserver_AuthenticationError);
            messenger.Nameserver.ServerErrorReceived += new EventHandler<MSNErrorEventArgs>(Nameserver_ServerErrorReceived);
            messenger.Nameserver.ContactService.ReverseAdded += new EventHandler<ContactEventArgs>(Nameserver_ReverseAdded);
            messenger.ConversationCreated += new EventHandler<ConversationCreatedEventArgs>(messenger_ConversationCreated);
            messenger.Nameserver.OIMService.OIMReceived += new EventHandler<OIMReceivedEventArgs>(Nameserver_OIMReceived);
            messenger.Nameserver.OIMService.OIMSendCompleted += new EventHandler<OIMSendCompletedEventArgs>(OIMService_OIMSendCompleted);
        }

        public List<RobotConversation> RobotConvlist
        {
            get
            {
                return _convs;
            }
        }

        private void NameserverProcessor_ConnectionEstablished(object sender, EventArgs e)
        {
            //messenger.Nameserver.AutoSynchronize = true;
            Console.WriteLine("==>Connection established!");
        }

        private void Nameserver_SignedIn(object sender, EventArgs e)
        {
            messenger.Owner.Status = PresenceStatus.Online;
            Console.WriteLine("==>Signed into the messenger network as " + messenger.Owner.Name);
        }

        private void Nameserver_SignedOff(object sender, SignedOffEventArgs e)
        {
            Console.WriteLine("==>Signed off from the messenger network");
        }

        private void NameserverProcessor_ConnectingException(object sender, ExceptionEventArgs e)
        {
            //MessageBox.Show(e.Exception.ToString(), "Connecting exception");
            Console.WriteLine("==>Connecting failed");
        }

        private void Nameserver_ExceptionOccurred(object sender, ExceptionEventArgs e)
        {
            // ignore the unauthorized exception, since we're handling that error in another method.
            if (e.Exception is UnauthorizedException)
                return;

            Console.WriteLine("==>Nameserver exception:" + e.Exception.ToString());
        }

        private void Nameserver_AuthenticationError(object sender, ExceptionEventArgs e)
        {
            Console.WriteLine("==>Authentication failed:" + e.Exception.InnerException.Message);
        }

        private void Nameserver_ServerErrorReceived(object sender, MSNErrorEventArgs e)
        {
            // when the MSN server sends an error code we want to be notified.
            Console.WriteLine("==>Server error received:" + e.MSNError.ToString());
        }

        void Nameserver_ReverseAdded(object sender, ContactEventArgs e)
        {
            //Contact contact = e.Contact;
            //contact.OnAllowedList = true;
            //contact.OnPendingList = false;
            //messenger.Nameserver.ContactService.AddNewContact(contact.Mail);

            Console.WriteLine("==>ReverseAdded contact mail:" + e.Contact.Mail);

            //messenger.Nameserver.AddNewContact(
            e.Contact.OnAllowedList = true;
            e.Contact.OnForwardList = true;

        }

        private void messenger_ConversationCreated(object sender, ConversationCreatedEventArgs e)
        {
            Console.WriteLine("==>Conversation created");
            _convs.Add(new RobotConversation(e.Conversation, this));
        }



        //offline status
        void Nameserver_OIMReceived(object sender, OIMReceivedEventArgs e)
        {
            Console.WriteLine("==>OIM received at : " + e.ReceivedTime + " From : " +
                e.NickName + " (" + e.Email + ") " + e.Message);

            TextMessage message = new TextMessage(e.Message);
            message.Font = "Trebuchet MS";
            //message.Color = Color.Brown;
            message.Decorations = TextDecorations.Bold;
            Console.WriteLine("==>Echo back");
            messenger.OIMService.SendOIMMessage(e.Email, message.Text);
        }

        void OIMService_OIMSendCompleted(object sender, OIMSendCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                Console.WriteLine("OIM Send Error:" + e.Error.Message);
            }
        }

        public void BeginLogin(string account, string password)
        {
            if (messenger.Connected)
            {
                Console.WriteLine("==>Disconnecting from server");
                messenger.Disconnect();
            }

            // set the credentials, this is ofcourse something every MSNPSharp program will need to implement.
            messenger.Credentials = new Credentials(account, password, MsnProtocol.MSNP16);


            // inform the user what is happening and try to connecto to the messenger network.  
            Console.WriteLine("==>Connecting to server...");
            messenger.Connect();

            //displayImageBox.Image = global::MSNPSharpClient.Properties.Resources.loading;

            //loginButton.Tag = 1;
            //loginButton.Text = "Cancel";

            // note that Messenger.Connect() will run in a seperate thread and return immediately.
            // it will fire events that informs you about the status of the connection attempt.
            // these events are registered in the constructor.
        }

        /// <summary>
        /// main()
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string robot_acc = "";
            string robot_passwd = "";

            if (args.Length == 0)
            {
                Console.WriteLine("USAGE:MSNRobot.exe <msn_account> [password]");    
                return;
            }

            robot_acc = args[0];

            if (args.Length == 2)
                robot_passwd = args[1];
            else
            {
                Console.WriteLine("Password for " + robot_acc + ":");
                robot_passwd = Console.ReadLine();
            }

            RobotMain app = new RobotMain();
            app.BeginLogin(robot_acc, robot_passwd);

            while (true)
            {
                Console.WriteLine("I am a MSN robot:" + robot_acc);
                Console.ReadLine();
            }
        }
    }
}

Avez-vous essayé le client exemple MSNPSharp?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top