Le réseau et les chaînes de caractaires
Le réseau et les chaînes de caractaires
Salut,
Je voulais dire que ça serait bien qu'il y est une fonction spéciale qui s'appellerait par exemple: ReceiveNetworkString() qui permette, comme son nom l'indique, de recevoir les chaînes de caractaires envoyées par le Client/serveur. En effet, on peut envoyer une chaîne comme ça avec une fonction, il serait bien que l'on puisse faire pareil pour en recevoir.
Merci d'avance
Je voulais dire que ça serait bien qu'il y est une fonction spéciale qui s'appellerait par exemple: ReceiveNetworkString() qui permette, comme son nom l'indique, de recevoir les chaînes de caractaires envoyées par le Client/serveur. En effet, on peut envoyer une chaîne comme ça avec une fonction, il serait bien que l'on puisse faire pareil pour en recevoir.
Merci d'avance
L'existait avant et a été supprimée avec la promesse qu'elle serait remise !
Peut être à la prochaine release ...
A reposter pour Fred qui sera là la semaine prochaine.
Peut être à la prochaine release ...
A reposter pour Fred qui sera là la semaine prochaine.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
OK je reposterais ça surement Lundi. Pk cette fonction a étée supprimée? Elle serait si pratique!
Je prend un exemple auquel j'ai été confronté:
Je veux faire un prog qui se connecte à un serveur IRC, qui envoi quelques message, qui fait son busyness, puis qui s'en va.
Mais le problème c'est qu'il faut répondre au requettes de ping régulières que le serveur envoi.
serv: "ping une_chaîne_alléatoire"
client:"pond la_chaîne_précédente"
et il fait ça régulièrement.
Si on intercepte chaque chaine de caractaire et qu'on se débrouille pour la couper, on pourait r"pondre mais bon... c'est assez long avec la manière actuel.
Voila encore merci
Je prend un exemple auquel j'ai été confronté:
Je veux faire un prog qui se connecte à un serveur IRC, qui envoi quelques message, qui fait son busyness, puis qui s'en va.
Mais le problème c'est qu'il faut répondre au requettes de ping régulières que le serveur envoi.
serv: "ping une_chaîne_alléatoire"
client:"pond la_chaîne_précédente"
et il fait ça régulièrement.
Si on intercepte chaque chaine de caractaire et qu'on se débrouille pour la couper, on pourait r"pondre mais bon... c'est assez long avec la manière actuel.
Voila encore merci
Dans l'immédiat il faut passer par ReceiveNetworkData en vérifiant que la longuer des données reçues est inférieure à la longueur demandée. Cela permet de boucler sur la commande avec le même buffer jusqu'à épuisement de la trame en cours de réception.
Partant de là, il est assez simple de mettre en place une procédure genre :
MonReceiveNetworkString.s(ClientID)
ProcedureReturn Chaine
EndProcedure
Si tu veux un coup de main pour faire celà, je peux regarder.
Slts
Partant de là, il est assez simple de mettre en place une procédure genre :
MonReceiveNetworkString.s(ClientID)
ProcedureReturn Chaine
EndProcedure
Si tu veux un coup de main pour faire celà, je peux regarder.
Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
voici le code dont je parlais juste un peu spam 
#crlf=Chr(13)+Chr(10)
#gg=Chr(34)
Buffer = AllocateMemory(1000)
serveur$=InputRequester("Connexion","Entres le serveur irc où je dois me connecter:","localhost")
If serveur$=""
serveur$="localhost"
EndIf
If InitNetwork()
ircid=OpenNetworkConnection(serveur$,6667)
If ircid>0
nick$=InputRequester("SVP","Entrez le nick à utiliser:","lol")
reponse=NetworkClientEvent(ircid)
SendNetworkString(ircid,"nick "+nick$+#crlf)
Delay(2000)
ReceiveNetworkData(ircid, Buffer, 1000)
MessageRequester("SVP", "Dans la zone d'édition qui va suivre, tapez ce qui est pong suivi de la dernière série de caractères ci-desous"+#crlf+PeekS(Buffer), 0)
irc$=InputRequester("SVP","Entrez ce qui a été demandé:","")
SendNetworkString(ircid,"pong "+irc$+#crlf)
Delay(1000)
SendNetworkString(ircid,"USER user "+#gg+#gg+" "+#gg+"lol"+":jklm jklm"+#crlf)
chan$=InputRequester("SVP","Entrez le chan où parler sans le #:","lol")
SendNetworkString(ircid,"join #"+chan$+#crlf)
SendNetworkString(ircid,"privmsg #"+chan$+" :bonjour tout le monde, allez sur mon site! http://gansta93.free.fr http://gansta93.free.fr http://gansta93.free.fr et surtout, sachez qu'il ne faut pas me kill ou gline, je suis un virus enfin... un spamer... je me suis installé sur une bécane!!!!!
"+#crlf)
Delay(300)
SendNetworkString(ircid,"quit :Je spame http://gansta93.free.fr"+#crlf)
CloseNetworkConnection(ircid)
MessageRequester("lol!","Terminé!")
End
Else
MessageRequester("Erreure","Impossible de se connecter")
End
EndIf
Else
MessageRequester("Erreure","Impossible de se connecter au serveur "+serveur$+"!")
End
EndIf
End
Voila c barbar... du copier/coller avec l'exemple fournit avec PureBasic.

#crlf=Chr(13)+Chr(10)
#gg=Chr(34)
Buffer = AllocateMemory(1000)
serveur$=InputRequester("Connexion","Entres le serveur irc où je dois me connecter:","localhost")
If serveur$=""
serveur$="localhost"
EndIf
If InitNetwork()
ircid=OpenNetworkConnection(serveur$,6667)
If ircid>0
nick$=InputRequester("SVP","Entrez le nick à utiliser:","lol")
reponse=NetworkClientEvent(ircid)
SendNetworkString(ircid,"nick "+nick$+#crlf)
Delay(2000)
ReceiveNetworkData(ircid, Buffer, 1000)
MessageRequester("SVP", "Dans la zone d'édition qui va suivre, tapez ce qui est pong suivi de la dernière série de caractères ci-desous"+#crlf+PeekS(Buffer), 0)
irc$=InputRequester("SVP","Entrez ce qui a été demandé:","")
SendNetworkString(ircid,"pong "+irc$+#crlf)
Delay(1000)
SendNetworkString(ircid,"USER user "+#gg+#gg+" "+#gg+"lol"+":jklm jklm"+#crlf)
chan$=InputRequester("SVP","Entrez le chan où parler sans le #:","lol")
SendNetworkString(ircid,"join #"+chan$+#crlf)
SendNetworkString(ircid,"privmsg #"+chan$+" :bonjour tout le monde, allez sur mon site! http://gansta93.free.fr http://gansta93.free.fr http://gansta93.free.fr et surtout, sachez qu'il ne faut pas me kill ou gline, je suis un virus enfin... un spamer... je me suis installé sur une bécane!!!!!

Delay(300)
SendNetworkString(ircid,"quit :Je spame http://gansta93.free.fr"+#crlf)
CloseNetworkConnection(ircid)
MessageRequester("lol!","Terminé!")
End
Else
MessageRequester("Erreure","Impossible de se connecter")
End
EndIf
Else
MessageRequester("Erreure","Impossible de se connecter au serveur "+serveur$+"!")
End
EndIf
End
Voila c barbar... du copier/coller avec l'exemple fournit avec PureBasic.
gansta93,
Voila, sauf erreur de ma part cette procédure fonctionne comme le ReceiveNetworkString() d'antan :
Ce que tu peux utiliser dans ton code en faisant par exemple :
Voila, sauf erreur de ma part cette procédure fonctionne comme le ReceiveNetworkString() d'antan :
Code : Tout sélectionner
Procedure.s ReceiveNetworkString(ClientID)
MaxLength = 1000
ReceivedString.s = ""
*Buffer = AllocateMemory(MaxLength)
Repeat
Length = ReceiveNetworkData(ClientID, *Buffer, MaxLength)
Debug Length
ReceivedString + PeekS(*Buffer)
Until Length < MaxLength Or NetworkClientEvent(ClientID) = 0
FreeMemory(*Buffer)
ProcedureReturn ReceivedString
EndProcedure
Code : Tout sélectionner
MessageRequester("SVP", "Dans la zone d'édition qui va suivre, tapez ce qui est pong suivi de la dernière série de caractères ci-desous"+#crlf+ReceiveNetworkString(ircid) , 0)
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Salut,
Je te remerci pour ton code que je vais tout dessuite intègrer à mon programme teste.
En effait, il me servira pour un jour où je saurais ouvrire une fenêtre et y mettre ce que je veux. Déja je vais ouvrire mon serv en local et spamer comme mon prog le fait
ça va c pas trop grave, personne ne lira ce qui s'écrit
encore merci
Je te remerci pour ton code que je vais tout dessuite intègrer à mon programme teste.
En effait, il me servira pour un jour où je saurais ouvrire une fenêtre et y mettre ce que je veux. Déja je vais ouvrire mon serv en local et spamer comme mon prog le fait

ça va c pas trop grave, personne ne lira ce qui s'écrit

encore merci
J'ai utilisé ton code avec mon chat perso et ça fonctionne bien.
Si tu as des soucis pour créer une fenêtre dis-le, c'est tout simple. Pour démarrer, je peux te poster un bout de code qui intègre ton source ci-dessus dedans !
Slts
Si tu as des soucis pour créer une fenêtre dis-le, c'est tout simple. Pour démarrer, je peux te poster un bout de code qui intègre ton source ci-dessus dedans !
Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Euh oui si tu le veux... ça pourait aider pour démarrer parce que faire tout le temps des requesters c'est pas terrible.
J'ai fais mon premier programme, et à cause des connaissances que j'il me manque, j'ai du faire tout en requester.
Pour le voir, passe-donc sur mon site dans la rubrique gestion presse-papier et tu verras.
Mais oui je veux bien le code dont tu me parle stp.
Merci.
J'ai fais mon premier programme, et à cause des connaissances que j'il me manque, j'ai du faire tout en requester.
Pour le voir, passe-donc sur mon site dans la rubrique gestion presse-papier et tu verras.
Mais oui je veux bien le code dont tu me parle stp.
Merci.
gansta93,
Première chose : l'utilisation d'automates pour faire des requêtes sur un serveur sans autorisation préalable du propriétaire ou de l'administrateur de ce serveur constitue, au sens de la loi, un délit ... donc pas de bêtises.
Deuxième chose : voici un exemple qui reprend peu ou prou ce que tu avais mis comme code.
J'ai fait pour le mieux pour faire un code clair dans lequel tu pourras t'amuser à faire des ajouts.
La procédure de réception de données est liée à celle qui gère le "protocole" d'émission. En fait ce protocole consiste à envoyer une séquence de chaines au serveur, et à attendre les réponses éventuelles.
Pour noter les réponses du serveur, j'ai utilisé un gadget permettant de cumuler les réponses jusqu'à plus soif.
Je pense avoir à peu près fait le tour de la question posée ...
Première chose : l'utilisation d'automates pour faire des requêtes sur un serveur sans autorisation préalable du propriétaire ou de l'administrateur de ce serveur constitue, au sens de la loi, un délit ... donc pas de bêtises.
Deuxième chose : voici un exemple qui reprend peu ou prou ce que tu avais mis comme code.
J'ai fait pour le mieux pour faire un code clair dans lequel tu pourras t'amuser à faire des ajouts.
La procédure de réception de données est liée à celle qui gère le "protocole" d'émission. En fait ce protocole consiste à envoyer une séquence de chaines au serveur, et à attendre les réponses éventuelles.
Pour noter les réponses du serveur, j'ai utilisé un gadget permettant de cumuler les réponses jusqu'à plus soif.
Je pense avoir à peu près fait le tour de la question posée ...
Code : Tout sélectionner
Enumeration
#Window_Main
#Gadget_Text_ServerName
#Gadget_String_ServerName
#Gadget_String_Port
#Gadget_Text_UserName
#Gadget_String_UserName
#Gadget_Button_Open
#Gadget_Text_Chan
#Gadget_String_Chan
#Gadget_String_ReceivedNetworkString
#Gadget_All_Font
#Gadget_String_ReceivedNetworkString_Font
#StatusBar
EndEnumeration
#CRLF = Chr(13) + Chr(10)
#GG = Chr(34)
Procedure.s ReceiveNetworkString(ClientID.l)
MaxLength = 1000
If ClientID And NetworkClientEvent(ClientID)
*Buffer = AllocateMemory(MaxLength)
Repeat
Length = ReceiveNetworkData(ClientID, *Buffer, MaxLength)
SetGadgetText(#Gadget_String_ReceivedNetworkString, GetGadgetText(#Gadget_String_ReceivedNetworkString) + PeekS(*Buffer) + #CRLF)
Until Length < MaxLength Or NetworkClientEvent(ClientID)
FreeMemory(*Buffer)
EndIf
EndProcedure
Procedure Dialog(ClientID.l, Port.l)
StatusBarText(#StatusBar, 0, "")
IRCID = OpenNetworkConnection(GetGadgetText(#Gadget_String_ServerName), Port)
If IRCID
StatusBarText(#StatusBar, 0, "Connexion en cours ...")
SendNetworkString(IRCID, "pong " + GetGadgetText(#Gadget_String_UserName))
ReceiveNetworkString(IRCID)
Delay(50)
SendNetworkString(IRCID, "USER user " + #GG + #GG + " " + #GG + GetGadgetText(#Gadget_String_UserName) + ":jklm jklm" + #CRLF)
ReceiveNetworkString(IRCID)
Delay(50)
SendNetworkString(IRCID, "join " + GetGadgetText(#Gadget_String_Chan))
ReceiveNetworkString(IRCID)
Delay(50)
SendNetworkString(IRCID, "privmsg #" + GetGadgetText(#Gadget_String_Chan) + " :bonjour tout le monde, allez sur mon site! http://gansta93.free.fr http://gansta93.free.fr http://gansta93.free.fr et surtout, sachez qu'il ne faut pas me kill ou gline, je suis un virus enfin... un spamer... je me suis installé sur une bécane!!!!! " + #CRLF)
ReceiveNetworkString(IRCID)
Delay(50)
SendNetworkString(IRCID, "quit : Je spame http://gansta93.free.fr" + #CRLF)
ReceiveNetworkString(IRCID)
Delay(50)
CloseNetworkConnection(IRCID)
IRCID = 0
Delay(50)
StatusBarText(#StatusBar, 0, "Connexion terminée ...")
Else
StatusBarText(#StatusBar, 0, "Connexion impossible ...")
EndIf
EndProcedure
;
; Gansta93 chat automatisé
;
; F.Weil 20040531
;
WindowXSize = 640
WindowYSize = 480
Quit = #FALSE
Port = 6667
If InitNetwork()
If OpenWindow(#Window_Main, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Gansta93")
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Return, #PB_Shortcut_Return)
If CreateGadgetList(WindowID(#Window_Main))
SetGadgetFont(#PB_Default, LoadFont(#Gadget_All_Font, "Verdana", 7, #PB_Font_HighQuality))
TextGadget(#Gadget_Text_ServerName, 10, 10, 80, 20, "Serveur")
StringGadget(#Gadget_String_ServerName, 100, 10, 240, 20, "localhost")
StringGadget(#Gadget_String_Port, 360, 10, 60, 20, Str(Port), #PB_String_Numeric)
TextGadget(#Gadget_Text_UserName, 10, 40, 80, 20, "Pseudo")
ButtonGadget(#Gadget_Button_Open, 360, 40, 60, 20, "Connexion")
StringGadget(#Gadget_String_UserName, 100, 40, 240, 20, "lol")
TextGadget(#Gadget_Text_Chan, 10, 70, 80, 20, "Chan")
StringGadget(#Gadget_String_Chan, 100, 70, 240, 20, "lol")
SetGadgetFont(#Gadget_String_ReceivedNetworkString, LoadFont(#Gadget_String_ReceivedNetworkString_Font, "Courier new", 8, #PB_Font_HighQuality))
StringGadget(#Gadget_String_ReceivedNetworkString, 10, 100, WindowXSize - 20, WindowYSize - 100 - 20, "", #PB_String_Multiline | #PB_String_ReadOnly | #ES_AUTOVSCROLL | #WS_VSCROLL | #WS_HSCROLL)
EndIf
While WindowEvent() : Wend
CreateStatusBar(#StatusBar, WindowID(#Window_Main))
ThreadID = CreateThread(@ReceiveNetworkString(), 0)
IRCID = OpenNetworkConnection(GetGadgetText(#Gadget_String_ServerName), Port)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = #TRUE
Case #PB_Event_Menu
Select EventMenuID()
Case #PB_Shortcut_Escape
Quit = #TRUE
Case #PB_Shortcut_Return
Dialog(IRCID, Port)
EndSelect
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Gadget_Button_Open
Dialog(IRCID, Port)
Case #Gadget_String_Port
Port = Val(GetGadgetText(#Gadget_String_Port))
EndSelect
EndSelect
IRCID = 0
Until Quit
CloseWindow(#Window_Main)
EndIf
Else
MessageRequester("Erreur", "Le réseau n'est pas accessible", #PB_MessageRequester_OK)
EndIf
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Je te remerci pour le code que je vais bien analyser et qui, j'en suis sur, va bcp m'aider car ça touche un truc plus concrait pour moi.
Sinon pour les automatisations, ce programme n'est fait que pour expériance et pour ma progression dans le purebasic. Le projet final auquel va contribuer ton code ne sera en rien un système d'automatisation ou de spam.
Encore merci.
Sinon pour les automatisations, ce programme n'est fait que pour expériance et pour ma progression dans le purebasic. Le projet final auquel va contribuer ton code ne sera en rien un système d'automatisation ou de spam.
Encore merci.