C# Aucunes réponses du serveur d'Authentification.

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#1
Bonjour !

J'ai décidé de me remettre dans le jus, je n'ai pour l'instant que le couple Reader & Writer, les bases de mes packets alors je commence la réception et.. Surprise ! Je ne reçois absolument rien et pourtant la connexion au serveur d'authentification est réussie, le thread de réception lancé et aucunes exceptions levées. J'ai essayé avec plusieurs points d'arrêts de comprendre le problème mais je ne vois pas. Voici le code de ma classe initialisant la connexion :

Code:
 public class Login : IDisposable
    {
        #region Privates
            private Thread _ReceptionThread;
            Socket ListenServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            private byte[] _buffer;
        #endregion

        #region Publics
            public delegate void SocketEventHandler(object sender, EventArgs e);
            public event SocketEventHandler OnEventCatched;
            public event SocketEventHandler OnDataReceived;
        #endregion



        public Login()
        {
            try
            {
                ListenServerSocket.Connect("213.248.126.39", 5555);
            }
            catch (SocketException e) {
                Console.WriteLine("[SocketException]" + e.Message);
                OnEventCatched(this, new EventArgs());
            }
        }

        public void Start()
        {
            if (ListenServerSocket.Connected)
            {
                Console.WriteLine("Connexion au serveur d'authentification réussi.\r\nLancement du thread de réception.\r\n");

                _ReceptionThread = new Thread(new ThreadStart(Receive));
                _ReceptionThread.Start();
            }
            else
            {
                Console.WriteLine("La connexion avec le serveur d'authentification (213.248.126.39, 5555) a échouée.");
            }
        }

        public void Receive()
        {
            while (ListenServerSocket.Connected)
            {
                _buffer = new byte[ListenServerSocket.Available];

                if (_buffer.Length != 0)
                {
                    ListenServerSocket.Receive(_buffer);
                    OnDataReceived(this, new EventArgs());
                    ParseData(_buffer);               
                }

            }
        }
        [...]
Si vous avez des idées, je suis preneur !
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Cela ne va surement pas régler ton probléme mais ne reset pas ton buffer a chaque fois, t'auras des soucis par la suite.

EDIT:
Tout à fait normal que tu n'aie aucune réponse. essaye ceci:

Tu vérifies si le buffer n'est pas vide alors qu'il vien d'être redéfini.

Code:
_buffer = new byte[ListenServerSocket.Available];

                if (_buffer.Length != 0)
Tu ne rempli par le buffer et tu le parse:

Code:
ListenServerSocket.Receive(_buffer);
                    ParseData(_buffer);
Essaye de comprendre ce que tu fais.

Voilà ce que sa donne:

Code:
while (ListenServerSocket.Connected)
            {
                dynamic i = ListenServerSocket.Receive(_buffer);

                if (i.Length != 0)
                {
                    byte[] data = new byte[i];
                    OnDataReceived(this, new EventArgs());
                    Array.Copy(_buffer, data, i)
                    ParseData(data);               
                }

            }
et modifie ta var buffer:
Code:
private byte[8191] _buffer;
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#3
De l'esbrouffe ! Je ne vérifie pas qu'il ne soit pas vide mais qu'il soit déclaré et avec une taille supérieur à 0. Si seulement le buffer dynamique est déclaré, à une taille égale à la taille des données disponibles grâce à Socket.Available, dans ce cas je les reçois, je soulève mon évènement et je parse mes données. Cela à marché au début, je ne sais pas ce que j'ai touché d'un debug à l'autre impossible de récupérer de nouveau quoi que ce soit.

Le problème n'est pas là, il vient du fait que je ne reçois rien du tout. Même quand je met des points d'arrêts pour contrôler l'état de mes variables, Socket.Available reste toujours désespérément à.. zéro.

De plus, pour l'avoir essayé, ton code ne fonctionne malheureusement pas. /:
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
Salut ,
et avec :
Int16 Counter = ListenServerSocket.Receive(RecvBytes, RecvBytes.Length, 0);
a la place de _buffer = new byte[ListenServerSocket.Available];
combien vaut Counter ? juste pour voir si le socket est bloquant ? (donc que .Available est valable)
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#5
Effectivement ma socket est bloquante, ce qui rend available complètement obsolète. Cependant, dans tout les cas, je ne reçois toujours rien. (Donc impossible de récupérer la valeur de Counter, je ne peux pas mettre de points d'arrêts après la réception vus que je ne passe jamais à la suite des instructions.). Wtf ? J'ai essayé pas mal de bidouillage et je commence à sécher littéralement.
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#7
Je m'y intéresserais demain. C'est étrange, je ne me souviens pas que j'utilisais des sockets asynchrones pour mon ancien prototype de bot (Les bases et quelques avancements sur RMTradeBot mon vieux projet). Qu'est-ce qui aurait changé justifiant que cette fois cela ne marche plus ? La réception d'aucunes données reste donc une énigme ?
 
Haut Bas