VB/VB.Net Le multicompte et les sockets

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#1
Bonjour,
J'ai encore un petit souci qui devrait être le dernier j’espère ;)
Actuellement je me co avec la fonction de Toons :
Code:
Public Shared socketConnexion As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
    Public Shared socketJeu As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 

    Public Ecoute_Connexion_thread As New Thread(New ThreadStart(AddressOf Ecoute_Connexion)) 
    Public Ecoute_Jeu_thread As New Thread(New ThreadStart(AddressOf Ecoute_Jeu))

    Public buffer(8192) As Byte 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If connected = False Then
            socketConnexion.Connect("213.248.126.180", 5555)
            Ecoute_Connexion_thread.Start()

            While Ecoute_Connexion_thread.IsAlive
                Application.DoEvents()
            End While
            socketJeu.Connect(ip, 5555)
            Ecoute_Jeu_thread.Start()
        End If

        RadForm1.statut("connected", id)

        connected = True
        Button1.Enabled = False

    End Sub

    Sub Ecoute_Connexion()
        While socketConnexion.Connected 
            Dim i = socketConnexion.Receive(buffer)
            Dim data(i - 1) As Byte
            Array.Copy(buffer, data, i)
            parsing(data)
        End While
    End Sub
    Sub Ecoute_Jeu()
        While socketJeu.Connected 
            Dim i = socketJeu.Receive(buffer)
            Dim data(i - 1) As Byte 
            Array.Copy(buffer, data, i) 
            parsing(data) 
        End While
    End Sub
Le probleme c'est que pour le multicompte ça passe pas :/
Je crée des forms (form avec le bot, sa connexion, son parser et tout) dans un mdi, le probleme c'est que toute les forms utilisent la même connexion...
Que me conseillez vous pour rendre le truc fonctionnel ?
 
A

Anonymous

Invité
#2
Enleve le Shared
 
A

Anonymous

Invité
#3
Quand je l’enlève il se connecte plus, il me met :

Code:
parsing() Send -> Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie
J'ai essaye plein de trucs déjà .
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
salut, mets le parsing dans la form enfant
 
A

Anonymous

Invité
#5
Lu,
Le parsing s'y trouve déjà...
 
A

Anonymous

Invité
#6
Tu recois des packets avant d'avoir cette erreur ?
 
A

Anonymous

Invité
#7
Oui mais je peux pas envoyer car ça plante
 
A

Anonymous

Invité
#8
bah quel packets recoi tu avant l'erreur --'
 
A

Anonymous

Invité
#9
Bein ce que tu reçois normalement avant la connexion quoi le HelloConnect... La réception fonctionne, l'écriture fonctionne mais l'envoi non
 
A

Anonymous

Invité
#10
Ouch je te demande quel packet tu recoi avant l'erreur waw regarde ta fenêtre log mdr
 
A

Anonymous

Invité
#11
On peut voir le code que tu utilises pour l'envoi ?
 
A

Anonymous

Invité
#12
Donne nous le derniere packet recu et le case correspondant au packet.
Sinon oui sa peut venir de ton dofuswriter mais je pense que c'est celui de ToOnS
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#13
ca doit venir des .pack car c'est pas fait pour gerer les multi compte d'origine
soit il faut copier tout d0fusStreamer.vb dans la form enfant ou
soit il faut transformer comme ca :
Code:
 ' Envoi du packet
                Dim Message As New Messages.Connection.IdentificationMessage
                Message.initIdentificationMessage(Version_, Account, Passe, certificate, True)
                Message.pack(_socket_Connexion) ' _socket_Connexion car on est en case 3 qui est entre 0 et 42 (inclus) , au dessus de 42 ca serait _socket_Jeu
puis dans Messages.Connection.IdentificationMessage.pack :
Code:
Public Function pack(_socket as Socket) ' la ajouter _socket as Socket
            Dim _loc_2 As New Dofus.DofusWriter
            Me.serialize(_loc_2)
            D0fus.D0fusWriter.Send(_socket , protocolId) ' la ajouter _socket 
            Return Me
        End Function
et donc dans D0fus.D0fusWriter.Send :
Code:
Friend Shared Sub Send(socket as Socket, PacketID As Integer) ' la ajouter _socket as Socket
...// blablabla
...
Console.WriteLine() 
' a partir de la changer par ca :
            If _socket.Connected Then
                _socket.Send(BytesToWrite)
            End If
'voila
            m_Bytes.Clear()
 
A

Anonymous

Invité
#14
Tu gère Toons. Merci une fois de plus !
 
A

Anonymous

Invité
#15
Je me demandais vu que ce système n'est pas prévu pour, je dois utiliser quoi au juste qui soit plus adapte ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#16
ca peu s'adapter assez facilement , j'en ai vu pas mal qui tournent en multi juste avec ca
 
Haut Bas