Page 2 sur 3
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 00:03
par blacksoul305
Super le lien. J'espère qu'il m'aidera à mener mon projet à bien !
Merci PandiPanda !
[EDIT:]
Voilà, donc j'ai réussi à faire un client et un serveur. Cependant, il y a un p'tit soucis concernant mon serveur.
Je lance le serveur en premier, j'ouvre une connexion et un port et attend que l'on se connecte à mon port d'ouvert.
Ensuite je mes mon Client qui va envoyer une première informations puis une seconde.
Pour être sur que le serveur reçoit bien, j'ai mis une MsgBox info (flag 64) qui m'informe que l'on m'a bien envoyé quelque chose, cependant, à peine je clique sur le bouton "OK" de la MsgBox que le serveur se ferme.
(Pour le serveur j'ai adapté l'exemple)
Peut-on me dire à quoi est due cette fermeture ?
Client
► Afficher le texte
Code : Tout sélectionner
$pseudo1 = InputBox("AccountMaker","Entrez votre pseudo ici")
$mdp = InputBox("AccountMaker","Entrez votre mot de passe ici")
$LOL = GUICtrlRead($pseudo1)
$LOL1 = GUICtrlRead($mdp)
Global $port = 6667
Global $masock
TCPStartup()
$masock = TCPConnect("(Mon IP d'Hamachi ici", $port)
sleep(1000)
TCPSend($masock, $pseudo1)
TCPSend($masock, $mdp)
Je n'ai pas mis mon IP d'Hamachi.
Serveur
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Example()
Func Example()
Global $port = 6667
Global $masock
Global $ConnectedSocket, $IPAccepted
Global $GOOEY, $edit
Global $msg, $recv
TCPStartup()
$masock = TCPListen(@IPAddress2,$port) ;@IPAdress2 = Mon IP Hamachi
If $masock = -1 Then Exit
$GOOEY = GUICreate("My Server (IP: " & @IPAddress2 & ")", 370, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
$ConnectedSocket = -1
Do
$ConnectedSocket = TCPAccept($masock)
Until $ConnectedSocket <> -1
$IPAccepted = SocketToIP($ConnectedSocket)
While 1
$msg = GUIGetMsg()
; GUI Closed
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; Try to receive (up to) 2048 bytes
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket,500)
; If the receive failed with @error then the socket has disconnected
;----------------------------------------------------------------
If @error Then ExitLoop
; Update the edit control with what we have received
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$IPAccepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
MsgBox(64,"Cool","It works")
EndFunc ;==>Example
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
Évitez de vous péter de rire en voyant le gros copier/coller aménagé, y a des débuts à tout non ? :hap:
Bon, je ne vois vraiment pas pourquoi le serveur ce ferme.
Si jamais j'arrive à corriger ce problème, il me reste plus que le code pour écrire dans la BDD !
Merci encore de votre aide !
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 00:26
par PandiPanda
Bon Bon comme je m'ennuyais un peu j'ai fait ca pour vous
► Afficher le textesur votre ordi ...
Code : Tout sélectionner
TCPStartup()
Global $serveur = "irc.freenode.org"
Global $port = 6667
Global $channel = "#blacksoul305"
Global $pseudo = "Black"
Global $masock
$masock = TCPConnect(TCPNameToIP($serveur), $port) ;établir la connexion au serveur
TCPSend($masock, "NICK " & $pseudo & @CRLF) ; on envoi le message NICK
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF) ; on envoi le message USER
While 1
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1) ;qu'est ce qu'il a dit
$ou = $datasplit2[3] ;et sur quel canal
_FileIniWrite($quoi)
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
EndSwitch
Next
WEnd
Func _FileIniWrite($Quoi)
$split=StringSplit($Quoi,"|")
If $split[0] = 2 Then
$username=$split[1]
$mdp=$split[2]
IniWrite(@ScriptDir&"\BlackSoul.ini",$username,"mdp",$mdp)
EndIf
EndFunc
► Afficher le textea l'utilisateur ...
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 228, 66, 192, 124)
Global $Input1 = GUICtrlCreateInput("Username", 8, 8, 145, 21)
Global $Input2 = GUICtrlCreateInput("Mot de passe", 8, 36, 145, 21)
Global $Button1 = GUICtrlCreateButton("OK", 160, 16, 65, 25, BitOR($WS_GROUP,$BS_DEFPUSHBUTTON))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup()
Global $serveur = "irc.freenode.org"
Global $port = 6667
Global $channel = "#blacksoul305"
Global $pseudo = "TestUser";ici faudra le rendre "unique". Bug si plusieur conexion avec le même nom ...
Global $masock
$masock = TCPConnect(TCPNameToIP($serveur), $port) ;établir la connexion au serveur
TCPSend($masock, "NICK " & $pseudo & @CRLF) ; on envoi le message NICK
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF) ; on envoi le message USER
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Local $user,$mdp
$user=GUICtrlRead($Input1)
$mdp=GUICtrlRead($Input2)
If $user <> "" And $mdp <> "" Then
TCPSend($masock, "PRIVMSG " & $channel & " :" & $user&"|"&$mdp & @CRLF); envoi
Else
MsgBox(0,"","erreur, remplisser les 2 champs")
EndIf
EndSwitch
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1) ;qu'est ce qu'il a dit
$ou = $datasplit2[3] ;et sur quel canal
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
EndSwitch
Next
WEnd
Pour faire un test, executer d'abord le 1er script, ensuite le 2eme et remplisser les champ

un fichier ini sera créer sur votre bureau.
Edit; si vous vennez d'avoir des probleme c'est normal, c'est que je faisais des test en même temps xD !
et comme on utilise les mêmes nom ...
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 00:28
par blacksoul305
Seulement quelques petit défauts, j'ai l'impression que mes informations que j'envoie font le tour du net pour me retrouver avec ceci:
[coucou]
mdp=ca va ? ^^
Haha !
C'est ça votre passe temps quand vous vous ennuyez ? Vous créer des scripts complexes ?
Mais cela me donne une idée. Le client envoie ses informations, le serveur les reçoit et écrit directement les informations en un fichier .ini.
Je pourrai peut être me débrouiller pour que avec un autre programme, je lis le .ini, le pseudo par dans cette case là, le mot de passe dans l'autre !
Ça pourrait marcher ?
Merci pour les scripts !
EDIT: Mais il est génial ce script ! Le fichier .ini est bien organisé, cela me facilitera la vie pour la tâche 3, encore bravo !
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 00:32
par PandiPanda
j'ai pas compris ce que vous voule faire '^^
le fichier .ini n'étais la qu'a titre d'exemple, vous vouliez pas écrire dans une BDD ?
Pour info, le second script envoi l'information comme ceci => "username|mdp"
Si vous ne dépasser pas les 500 caractere, le script devrai fonctionner parfaitement.
Edit: de plus comme il est specifier dans le second script, vous devez trouver un nom UNIQUE pour "TestUser"
et differente voie s'offre a vous ^^
soit a coup de random, soit vous recuperer des info unique sur l'ordi, ou l'heure, etc ...
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 00:34
par blacksoul305
Si il y a moyen d'écrire dans ma BDD automatiquement via Autoit, ça m'intéresse oui... Il faudrait que j'y travail ...
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 01:01
par PandiPanda
étant donné que je travaille pas vraiment avec les BDD je pourrai pas vous être d'une grande aide ...
mais une petite recherche sur ce forum et à coup de question, suis sûr que vous arriverez à vos fin
ca aide?
j'ai editer mon post plus haut, parceque à l'etat actuel du script, il ne fonctionne que pour 1 seule personne de connecter a la fois ^^ [je vous laisse faire "débuguage/amélioration"]
Bon une petite aide, comme je l'ai faite xD
le second script comme ceci;
► Afficher le textea l'utilisateur
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 228, 66, 192, 124)
Global $Input1 = GUICtrlCreateInput("Username", 8, 8, 145, 21)
Global $Input2 = GUICtrlCreateInput("Mot de passe", 8, 36, 145, 21)
Global $Button1 = GUICtrlCreateButton("OK", 160, 16, 65, 25, BitOR($WS_GROUP,$BS_DEFPUSHBUTTON))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
[color=#40BF00]Dim $Lettre[26]=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","w","x","y","z"][/color]
TCPStartup()
Global $serveur = "irc.freenode.org"
Global $port = 6667
Global $channel = "#blacksoul305"
[color=#00BF00]Global $pseudo = String($Lettre[@MON]&$Lettre[@HOUR]&$Lettre[Random(0,25,1)]&$Lettre[Abs(@MDAY-10)]&$Lettre[Abs(Int(@MIN/2)-6)])[/color]
$masock = TCPConnect(TCPNameToIP($serveur), $port) ;établir la connexion au serveur
TCPSend($masock, "NICK " & $pseudo & @CRLF) ; on envoi le message NICK
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF) ; on envoi le message USER
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Local $user,$mdp
$user=GUICtrlRead($Input1)
$mdp=GUICtrlRead($Input2)
If $user <> "" And $mdp <> "" Then
TCPSend($masock, "PRIVMSG " & $channel & " :" & $user&"|"&$mdp & @CRLF); envoi
Else
MsgBox(0,"","erreur, remplisser les 2 champs")
EndIf
EndSwitch
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1) ;qu'est ce qu'il a dit
$ou = $datasplit2[3] ;et sur quel canal
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
EndSwitch
Next
WEnd
ajout de la ligne permettant de rendre unique un utilisateur sur le channel (unique c'est un Grand mot, mais il y'a tres peu de chance qu'il aie 2 fois le même nom actuellement ...)
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 01:11
par blacksoul305
Arrgh...
J'ai rien trouvé de concluant pour l'instant.
Seul ce lien m'avait l'air convaincant, mais au moment où j'exécute le code (en ayant rentré mes informations de dans), j'ai le droit à une MsgBox marquée "Statut 0X000000000" et fini...
http://www.autoitscript.com/forum/topic ... _hl__mysql
J'ose espérer qu'un(e) fondu(e) des BDD SQLite sous Autoit passera par là pour m'aider !
Merci PandiPanda pour ton aide ci précieuse.
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 01:23
par PandiPanda
ceci vous aide pas?
un UDF tout fait, avec quelque exemple
ici
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 17:26
par blacksoul305
Bonjour.
J'ai reçu deux scripts, Client&Serveur mais le soucis, c'est qu'à la de la transmissions, le serveur lui aussi se ferme. Je vous envoie les scripts:
(Scripts de floriande26, merci.)
CLIENT
► Afficher le texte
Code : Tout sélectionner
Global $ConnectedSocket
Example()
Func Example()
Local $szData
Local $szIPADDRESS = "IP..."
Local $nPORT = 33891
TCPStartup()
$ConnectedSocket = -1
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
If @error Then
MsgBox(4112, "Erreur", "Impossible de se connecter, erreur n° " & @error)
Else
AdlibRegister('recv')
$szData = InputBox("LOLCoAccountMaker", @LF & @LF & "Entrez votre pseudo:")
If @error Or $szData = "" Then Exit
TCPSend($ConnectedSocket, $szData)
If @error Then Exit
$szData2 = InputBox("LOLCoAccountMaker", @LF & @LF & "Entrez votre mot de passe:")
If @error Or $szData2 = "" Then Exit
TCPSend($ConnectedSocket, $szData2)
If @error Then Exit
EndIf
EndFunc ;==>Example
Func recv()
$total = ''
While 1
$var = TCPRecv($ConnectedSocket, 1000)
$total &= $var
If $var = '' Then ExitLoop
WEnd
If $total <> '' Then MsgBox('','','Server say : ' & $total)
EndFunc
SERVEUR
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;SERVER!! Start Me First !!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
Local $szIPADDRESS = @IPAddress2
Local $nPORT = 33891
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv
TCPStartup()
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
If $MainSocket = -1 Then Exit
$GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
$ConnectedSocket = -1
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
$szIP_Accepted = SocketToIP($ConnectedSocket)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
$recv = TCPRecv($ConnectedSocket, 2048)
If @error Then ExitLoop
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
If $recv = 'test' Then TCPSend($ConnectedSocket, 'test ok')
WEnd
EndFunc ;==>Example
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
J'espère que vous trouverez une solution à ce problème.
Pour ce qui en est de l'écriture dans une BDD:
PandiPanda a écrit :ceci vous aide pas?
un UDF tout fait, avec quelque exemple
ici
Je n'arrive même pas à ouvrir ma base de données donc écrire de dans...
Pour l'instant je n'arrive pas à avancer ? Vous avez des suggestions ? Une solution ?
Merci !
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 17:59
par PandiPanda
les scripts plus haut passant par IRC ne vous convenait pas?
vous voulez "absolument" passer par un systeme "client-serveur" ?
pourtant la mise en place est bien plus facile avec IRC surtout si ce n'est que l'envoi d'username et de mot de passe ...
pour la BDD j'ai pas regarder, je le ferai quand j'aurai le temps

^^
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 18:43
par blacksoul305
Si sous IRC c'est plus facile que sous Client-Serveur, on peut rester sous IRC.
Merci de chercher à propos de MySQL, j'utilise SQLite.
Par contre il y a un soucis, le fichier .ini ne se créé plus... Pourquoi ?
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 18:52
par PandiPanda
Pour moi c'est plus facile, enfin je pense xD
et si le fichier ini est déja créer il ne recréera plus, mais écrira juste dedans?
j'ai modifié un peu les script, maintenant vous voyez le moment ou vous envoyé, et quand le script principal reçoit. et le temps d'attente/réception est acceptable à mon avis ^^
► Afficher le texteScript 1 (sur votre ordi)
Code : Tout sélectionner
TCPStartup()
Global $serveur = "irc.freenode.org"
Global $port = 6667
Global $channel = "#blacksoul305"
Global $pseudo = "Black"
Global $masock
$masock = TCPConnect(TCPNameToIP($serveur), $port) ;établir la connexion au serveur
TCPSend($masock, "NICK " & $pseudo & @CRLF) ; on envoi le message NICK
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF) ; on envoi le message USER
While 1
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1) ;qu'est ce qu'il a dit
$ou = $datasplit2[3] ;et sur quel canal
TCPSend($masock, "PRIVMSG " & $channel & " :" &$qui&"|recu" & @CRLF); envoi
_FileIniWrite($quoi)
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
EndSwitch
Next
WEnd
Func _FileIniWrite($Quoi)
$split=StringSplit($Quoi,"|")
If $split[0] = 2 Then
$username=$split[1]
$mdp=$split[2]
IniWrite(@ScriptDir&"\BlackSoul.ini",$username,"mdp",$mdp)
EndIf
EndFunc
► Afficher le texteScript 2 pour l'utilisateur
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1_1 = GUICreate("Form1", 229, 67, 192, 124)
Global $Input1 = GUICtrlCreateInput("Username", 8, 8, 145, 21)
Global $Input2 = GUICtrlCreateInput("Mot de passe", 8, 36, 145, 21)
Global $Button1 = GUICtrlCreateButton("OK", 160, 8, 65, 25, BitOR($BS_DEFPUSHBUTTON,$WS_GROUP))
Global $Label1 = GUICtrlCreateLabel("", 160, 40, 60, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dim $Lettre[26]=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","w","x","y","z"]
TCPStartup()
Global $serveur = "irc.freenode.org"
Global $port = 6667
Global $channel = "#blacksoul305"
Global $pseudo = String($Lettre[@MON]&$Lettre[@HOUR]&$Lettre[Random(0,25,1)]&$Lettre[Abs(@MDAY-10)]&$Lettre[Abs(Int(@MIN/2)-6)])
$masock = TCPConnect(TCPNameToIP($serveur), $port) ;établir la connexion au serveur
TCPSend($masock, "NICK " & $pseudo & @CRLF) ; on envoi le message NICK
TCPSend($masock, "USER " & $pseudo & " test test2 :OhMyGod " & @CRLF) ; on envoi le message USER
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Local $user,$mdp
$user=GUICtrlRead($Input1)
$mdp=GUICtrlRead($Input2)
If $user <> "" And $mdp <> "" Then
TCPSend($masock, "PRIVMSG " & $channel & " :" & $user&"|"&$mdp & @CRLF); envoi
GUICtrlSetData($Label1,"envoyé")
Else
MsgBox(0,"","erreur, remplisser les 2 champs")
EndIf
EndSwitch
$data = TCPRecv($masock, 4000) ; on insere ce qu'on recoit dans $data
If @error Then Exit ; si il y a une erreur, on ferme la boucle.
If Not $data Then ContinueLoop ; sinon on continue à lire
$datasplit = StringSplit($data, @CRLF, 1) ;on decompose dans un array le packet qu'on a recu pour differencier chaque ligne recu
For $i = 1 To $datasplit[0] ;on forme une boucle pour étudier chacune des lignes recu
$datasplit2 = StringSplit($datasplit[$i], " ") ;on decompose dans un array la ligne qu'on a recu pour differencier chaque mot de la ligne
If $datasplit2[1] = "PING" Then TCPSend($masock, "PONG " & $datasplit2[2] & @CRLF) ;Respond to PING requests from the server
If $datasplit2[0] < 3 Then ContinueLoop ; on verifie qu'il y a plus de 3 mot dans la ligne, si oui on continue
Switch $datasplit2[2] ;on fait un switch pour faire des différences si le deuxieme mot est :
Case "PRIVMSG" ; privmsg (donc on recoit du texte)
$qui = StringMid($datasplit2[1], 2, StringInStr($datasplit2[1], "!") - 2) ;recuperer le pseudo de celui qui a écrit
$quoi = StringMid($datasplit[$i], StringInStr($datasplit[$i], ":", 0, 2) + 1) ;qu'est ce qu'il a dit
$ou = $datasplit2[3] ;et sur quel canal
$tmp=StringSplit($quoi,"|")
If $tmp[0]=2 And $tmp[1]=$pseudo And $tmp[2]="recu" Then GUICtrlSetData($Label1,"reçu")
Case "001" ; 001 (c'est à dire qu'on a fini de se connecter, on établie la connexion au channel
TCPSend($masock, "JOIN " & $channel & @CRLF) ;JOIN #channel
EndSwitch
Next
WEnd
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 19:02
par blacksoul305
Merci pour les deux scripts mais le problème persiste. Je n'ai rien touché, seulement créer les éxécutables pour pouvoir les tester et ça ne marche toujours.
Je lance le serveur d'abord et le client en suite, j'envoie et le client m'écrit "envoyé", cependant, le serveur tourne toujours, pas de fichier .ini à l'horizon et pas de message non plus. Est-ce le serveur IRC qui plante ?
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 19:08
par PandiPanda
non le serveur IRC ne plante pas, puisque j'ai fait les test y'a même pas 30 sec '^^
hmmmmm je vais vérifier cela
j'ai mit dans un fichier rar, les fichiers deja compilé, vous pouvez essayer?
perso ca fonctionne parfaitement ...
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 19:11
par blacksoul305
Ah bah là ça marche, vous avez modifier quelque chose ?
Et pour SQL, comment on fait ? Plus qu'une dernière ligne droite !
Re: [..] Écrire dans une BDD SQL à distance
Posté : sam. 27 août 2011 19:21
par PandiPanda
Non j'ai rien modifié, et pour SQL me suis pas pencher dessus, désoler '^^
Re: [..] Écrire dans une BDD SQL à distance
Posté : dim. 28 août 2011 22:23
par blacksoul305
Donc, j'ai commencé à tester pour SQLite mais je n'y comprend rien.
Toutes les commandes Autoit ne ressemblent pas et même en regardant l'aide j'ai toujours des trous !
Toujours en attente d'aide !
Merci à tout les Autoitiens Pro qui aident les Autoitiens débutant !
Re: [..] Écrire dans une BDD SQL à distance
Posté : dim. 28 août 2011 23:20
par jchd
Je pense que ton principal problème est la confusion que tu fais entre MySQL et SQLite. Ce sont deux moteurs de BDD qui n'ont strictement rien à voir, mis à part un certain nombre de notions et syntaxes SQL en commun (et encore, avec deux grains de sel) !
Je ne me suis pas beaucoup penché sur ce fil, car essentiellement étranger à MySQL.
Par contre, j'ai en effet une certaine expérience SQLite et sa mise en oeuvre sous AutoIt.
Partant de là, si on considère que le problème de la transmision TCP (ou autre) est une question distincte et apparemment bien couverte par d'autres intervenants, voyons le côté SQLite.
SQLite est parfait pour mettre en place une base de données soit pour un serveur (ton cas si j'ai bien capté) et/ou un ensemble de processus tapant dedans à partir de la même machine hôte. Je déconseille très fortement l'emploi de SQLite au travers d'un réseau (local ou pas, WinMachin, MacIntrash ou Linux), sauf à mettre en oeuvre des techniques non triviales pour des néophytes (je dis ça sans condescendance). La raison en est une instabilité chronique dans les différentes implémentations des protocoles de partage/verrouillage de fichiers, chose contre laquelle SQLite ne peut pas grand chose par lui-même.
Ceci dit, si ta couche serveur est en AutoIt, rien ne t'empêche de taper dans ta base SQLite locale soit par le process serveur lui-même soit via un programme dédié avec lequel tu peux communiquer par IPC (peu importe le moyen employé pour le lien IPC).
La question qui se pose est : quel doit être le schéma de ta base ? En d'autres termes : quelles informations vas-tu y stocker, quelles relations ont-elles entre-elles, quelles sont leurs contraintes et quelles requêtes vas-tu avoir à formuler de façon routinière ?
Une fois les réponses claires à ces questions, le "design" de ta base émergera tout seul et son emploi coulera de source, peu ou prou.
SQL n'est pas un langage de programmation classique ; il se base sur la théorie des ensembles (grosso modo). Il demande donc de se plier à certaines règles simples mais strictes et impose un mode de pensée potentiellement déroutant pour qui l'aborde pour la première fois. Cependant, une fois les bases acquises, il devient tout à fait naturel, étant fondamentalement logique par construction.
SQLite est un animal unique dans le monde des BDD car c'est de loin le moteur le plus répandu au monde, du fait de son emploi dans chaque Mac, chaque Linux/Unix, toute installation de FireFox, la majorité des produits Adobe, l'écrasante majorité des smartphones, des GPS et de bien d'autres équipements grand public ou professionnels. Paradoxalement, il est aussi, à l'opposé, au coeur de beaucoup de sites très fréquentés avec des bases de calibre DataCenter et des milliers d'utilisateurs simultanés.
Ce petit bout de soft placé dans le domaine public t'offre gracieusement toute sa puissance et sa versatilité. A toi de déterminer et d'exprimer tes besoins pour nous aider à t'en faire bénéficier.
Re: [..] Écrire dans une BDD SQL à distance
Posté : lun. 29 août 2011 01:24
par blacksoul305
Ouaw, bah vous en connaissez des choses sur MySQL et SQLite.
Je voulais tout simplement savoir si c'était possible d'écrire dans une base de donnée avec Autoit (apparement oui) et comment faire ?
J'ai strictement rien compris...
Je résume les choses, le programme sur un autre ordinateur m'envoie deux informations:
1 pseudo
1 mot de passe
Je reçois ces informations via un serveur. Lorsque j'ai reçu ces informations, je veux les écrire dans ma base de donnée et c'est là où je coince, je ne sais pas comment on fait !
J'ai vu (et ne me suis pas trompé) que vous en saviez des choses sur SQLite pendant que je faisais mes recherches, peut être que cela est simple pour vous.
Bref, merci pour les explications et pour les futures aides !
Re: [..] Écrire dans une BDD SQL à distance
Posté : lun. 29 août 2011 22:34
par jchd
S'il ne s'agit que de stocker cela, ça va être facile à plier.
Soit dit au passage, on évite de stocker login et mdp dans une base. On ne stocke généralement que le login et le hash de (login, mdp et sel) pour de simples raisons de sécurité.
Sinon, va pour login et mdp en clair, mais on va quand même rajouter le moment de création et celui du dernier accès.
Les "timestamps" sont en temps UTC avec secondes fractionnaires, stockés sous format chaîne pour la simplicité d'affichage, au cas où.
Voici un squelette.
► Afficher le texte
Code : Tout sélectionner
#include <SQLite.au3>
#include <SQLite.Dll.au3>
_SQLite_Startup()
OnAutoItExitRegister('_SQLite_ShutDown')
Local $hDB = _SQLite_Open(@ScriptDir & '\Comptes.db') ; création ou ouverture de la base
_SQLite_SetTimeout($hDB, 60000)
_SQLite_Exec($hDB, _
"CREATE TABLE if not exists [Comptes] (" & _
"[Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " & _
"[login] CHAR NOT NULL, " & _
"[password] CHAR NOT NULL, " & _
"[Creation] CHAR DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')), " & _
"[LastUse] CHAR DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')));" & _
"CREATE UNIQUE INDEX if not exists [ixLogin] ON [Comptes] ([login]);")
; corps de ton programme
; disons que tu doive créer ce compte :
Local $login = "abcdef"
Local $mdp = "ù87Rh6wÂkÿ84"
; création de ce compte
If NouveauCompte($login, $mdp) Then
MsgBox(0, "Erreur", "Ce compte existe déjà")
Else
MsgBox(0, "", "Le compte a été créé")
EndIf
; tentative de re-création du premier compte
If NouveauCompte($login, $mdp) Then
MsgBox(0, "Erreur", "Ce compte existe déjà")
Else
MsgBox(0, "", "Le compte a été créé")
EndIf
; disons que tu doive maintenant créer ce compte :
Local $login2 = "jesuisleroiduSQL"
Local $mdp2 = "('_uiçàp789gfbjçt"
; création de ce compte
If NouveauCompte($login2, $mdp2) Then
MsgBox(0, "Erreur", "Ce compte existe déjà")
Else
MsgBox(0, "", "Le compte a été créé")
EndIf
Local $mdp2 = "nouveau mot de passe !"
; changement de mdp
ChangeMdp($login, $mdp, $mdp2)
; login (incorrect) de l'utilisateur
If VerifieCompte($login, $mdp) Then
MsgBox(0, "Utilisateur enregistré", "Login correct")
Else
MsgBox(0, "Erreur", "Login invalide")
EndIf
; login (correct) de l'utilisateur
If VerifieCompte($login, $mdp2) Then
MsgBox(0, "Utilisateur enregistré", "Login correct")
Else
MsgBox(0, "Erreur", "Login invalide")
EndIf
; effacement du second compte
EffaceCompte($login2)
; on arrête les frais
_SQLite_Close($hdb)
; --------------------------------------------------------------------
Func NouveauCompte($compte, $mdp)
_SQLite_Exec($hDB, "insert into comptes (login, password) values ("&X($compte)&XX($mdp)&");") ; la contrainte unique sur login veille sur nous !
Return(@error)
EndFunc
Func ChangeMdp($compte, $oldmdp, $newmdp)
Local $Id = VerifieCompte($compte, $mdp)
If $Id Then
_SQLite_Exec($hdb, "update comptes set password = "&X($newmdp)&" where login = "&X($compte)&" and password = "&X($oldmdp)&";")
EndIf
Return($ID)
EndFunc
Func EffaceCompte($compte)
_SQLite_Exec($hdb, "delete from comptes where login = "&X($compte)&";")
EndFunc
Func VerifieCompte($compte, $mdp)
Local $row
_SQLite_QuerySingleRow($hdb, "select id from comptes where login = "&X($compte)&" and password = "&X($mdp)&";", $row)
$row = Number($row[0])
; si le compte existe, on met à jour le moment de dernier accès
If $row Then
_SQLite_Exec($hdb, "update comptes set lastuse = strftime('%Y-%m-%d %H:%M:%f', 'now') where id = "&$row&";")
EndIf
Return($row) ; renvoie 0 si le compte n'existe pas, l'ID du compte (> 0) s'il existe
EndFunc
; -------------------------------------------------------------------------
; fonctions perso pour la compacité de rédaction des requêtes SQL
Func X($s)
Return ("'" & StringReplace($s, "'", "''", 0, 1) & "'")
EndFunc ;==>X
Func XX($s)
Return (",'" & StringReplace($s, "'", "''", 0, 1) & "'")
EndFunc ;==>XX
Func Y($s)
Return ("X'" & Hex($s) & "'")
EndFunc ;==>Y
Func YY($s)
Return (",X'" & Hex($s) & "'")
EndFunc ;==>YY
Func Z($s)
Return (Number($s))
EndFunc ;==>Z
Func ZZ($s)
Return ("," & Number($s))
EndFunc ;==>ZZ
Désolé du temps que je mets parfois à répondre, je suis actuellement dans une situation ... disons précaire à tout le moins.