[..] Tchat IRC Autoit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Akilla
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 31 août 2013 15:04
Status : Hors ligne

[..] Tchat IRC Autoit

#1

Message par Akilla »

Bonjour,

Je planche actuellement sur un Tchat IRC...
Cependant j'ai un soucis, on dirait que le tchat ne veut pas se connecter au serveur IRC...

Voici le code :

Code : Tout sélectionner

Global $serveur = "irc.quakenet.org"
Global $port = 6667
Global $channel = "#test2525"
Global $pseudo = "tester2525"

Global $sock

TCPStartup()
$sock = TCPConnect(TCPNameToIP($serveur), $port)
Sleep(5000)
TCPSend($sock, "NICK " & $pseudo & @CRLF)
TCPSend($sock, "USER " & $pseudo & " test test2 :charlie chaplin " & @CRLF)
 
Et plus loin :

Code : Tout sélectionner

$data = TCPRecv($sock, 4000)

  If @error Then Exit
Donc, le programme se lance bien, il passe le Sleep, puis il se ferme directement...
Donc, il y a erreur de connexion, mais d'où vient-elle ? J'ai tout essayé, je vois vraiment pas.

Vous auriez une idée ?

Merci beaucoup.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#2

Message par Tlem »

Bonjour.

En l'état, je ne vois aucune boucle d'attente. Donc le code est exécuté un fois puis le script ce termine normalement !

Vous dites avoir un erreur (ce qui est possible), dans ce cas, la console de SciTE vous donnera plus de détails que vous pouvez nous transmettre ici.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Akilla
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 31 août 2013 15:04
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#3

Message par Akilla »

Non, j'ai bien mis une boucle infinie aussi :

Code : Tout sélectionner

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Button1
            TCPSend($sock, "PRIVMSG " & $channel & " :" & GUICTrlRead($Input1) & @CRLF)
            _GUICTrlListBox_AddString($List1, "<" & $pseudo & "> " & GUICTRLRead($input1))
            GUiCtrlsEtData($Input1, "")

    EndSwitch

    $data = TCPRecv($sock, 4000)

    If @error Then Exit
    If Not $data Then ContinueLoop

WEnd
Scite lui ne montre aucune erreur, mais le programme se ferme bien après le temps de pause du Sleep...

EDIT : L'erreur vient bien du TCPRecv

Code : Tout sélectionner

TCPRecv($sock, 4000)
Mais alors pourquoi ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#4

Message par Tlem »

Regardez ce que le "If @error" vous retourne. ^^

Envoyé depuis mon appareil mobile.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Akilla
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 31 août 2013 15:04
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#5

Message par Akilla »

Return Value
Success: the binary/string sent by the connected socket.
Failure: "" and sets the @error flag to non-zero.
@error: -1 Socket error
windows API WSAGetError return value (see MSDN).
ça me retourne -1. Une erreur de socket... mais ça me dit pas comment corriger le problème ! :/
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#6

Message par Tlem »

Bonsoir.
Si comme vous l'avez indiqué, c'est un TChat, le flux de données n'est pas constant. ^^
Si vous sortez du script après avoir reçu (ou pas) les premières données, vous ne risquez pas de recevoir quoi que ce soit de plus. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Akilla
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 31 août 2013 15:04
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#7

Message par Akilla »

C'est pour cela qu'il y a la ligne suivante :

Code : Tout sélectionner

    If Not $data Then ContinueLoop
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#8

Message par Tlem »

Certes, mais le Exit est avant !
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Akilla
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 31 août 2013 15:04
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#9

Message par Akilla »

Oui m'enfin, normalement des données sont forcément reçues...
Le tout ce serait de savoir pourquoi il y a une erreur de socket. Enfin bref, ça m'embrouille tout ça !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tchat IRC Autoit

#10

Message par Tlem »

Bonjour.
Si on fait abstraction de la partie graphique, dans votre code, vous faites ceci :

Code : Tout sélectionner

While 1
    $data = TCPRecv($sock, 4000)
    If @error Then Exit
    If Not $data Then ContinueLoop
WEnd
Cette boucle est sensée être "infinie", mais la ligne "If @error Then Exit" indique que si il y à une erreur, on quitte le script !
Or si vous lisez l'aide de la commande TCPRecv(), il est dit ceci :
Return Value
Success: the binary/string sent by the connected socket.
Failure: "" and sets the @error flag to non-zero.
@error: -1 Socket error
Donc lorsque la commande "TCPRecv($sock, 4000)" ne reçoit plus de données, vous avez bel et bien une erreur et donc, votre script est terminé. :roll:

N'oubliez pas de mettre aussi le paramètre flag à 1, sinon, dans certains cas, vous n'aurez pas forcément une chaine en retour (voir la section Remarks de l'aide). :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre