Page 1 sur 1
problème avec une applie serveur
Publié : ven. 30/juil./2004 12:08
par gansta93
Bonjour,
je voudrais faire un serveur avec une fenêtre pour pouvoir le fermer mais le problème c'est que le serveur ne répond pas aux requettes.
Code : Tout sélectionner
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur")
EndIf
StatusBarText(0,0,"Serveur prait :-)",#pb_statusBar_center)
EndIf
EndProcedure
Procedure prand(client)
buffer=AllocateMemory(1000)
ReceiveNetworkData(client,buffer,8)
datanet$=PeekS(buffer)
ProcedureReturn datanet$
EndProcedure
If InitNetwork()
If CreateNetworkServer(22021987)
Open_Window_0()
Repeat
Select WindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #Button_0
quit=1
EndSelect
Case #PB_Event_CloseWindow
quit=1
EndSelect
evenement=NetworkServerEvent()
If evenement
id=NetworkClientID()
Select evenement
Case 1 ; Nouveau client
MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop)
Case 2 ; Information ressue
Select prand(id)
Case "ouvcdrom"
If InitCDAudio()
EjectCDAudio(1)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "fercdrom"
If InitCDAudio()
EjectCDAudio(0)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "playson"
If InitSound()
If LoadSound(0,Env("%windir%\media\tada.wav"))
PlaySound(0)
Delay(2000)
PlaySound(0)
Delay(2000)
FreeSound(0)
Else
SendNetworkString(id,"soundnol")
EndIf
Else
SendNetworkString(id,"nosocard")
EndIf
Case "bouh_box"
MessageRequester("Bouh!","Tu vas fliper mon vieu!",#mb_ok|#mb_iconstop)
EndSelect
Case 3 ; Fichier envoyé
fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt"
ReceiveNetworkFile(id,fichier$)
MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk)
Case 4 ; Client déconnecté
MessageRequester("Information","Le client "+Str(id)+" vien de se déconnecter.",#mb_ok|#mb_iconasterisk)
EndSelect
EndIf
Delay(20)
Until quit=1
CloseNetworkServer()
CloseWindow(#Window_0)
End
Else
MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop)
EndIf
End
Merci d'avance... j'aimerais bien comprendre pourquoi il ne répond pas aux requettes.
Publié : ven. 30/juil./2004 12:50
par Heis Spiter
Code : Tout sélectionner
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
EndEnumeration
#crlf = Chr(13)+Chr(10)
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur")
EndIf
If CreateStatusBar(0, WindowID())
AddStatusBarField(202)
EndIf
StatusBarText(0,0,"Serveur prêt :-)",#pb_statusBar_center)
EndIf
EndProcedure
Procedure prand(client)
buffer=AllocateMemory(1000)
ReceiveNetworkData(client,buffer,8)
datanet$=PeekS(buffer)
ProcedureReturn datanet$
EndProcedure
If InitNetwork()
If CreateNetworkServer(21987)
Open_Window_0()
Repeat
Select WindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #Button_0
quit=1
EndSelect
Case #PB_Event_CloseWindow
quit=1
EndSelect
evenement = NetworkServerEvent()
If evenement
id = NetworkClientID()
Select evenement
Case 1 ; Nouveau client
MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop)
Case 2 ; Information ressue
Select prand(id)
Case "ouvcdrom"
If InitCDAudio()
EjectCDAudio(1)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "fercdrom"
If InitCDAudio()
EjectCDAudio(0)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "playson"
If InitSound()
If LoadSound(0, "%windir%\media\tada.wav")
PlaySound(0)
Delay(2000)
PlaySound(0)
Delay(2000)
FreeSound(0)
Else
SendNetworkString(id,"soundnol")
EndIf
Else
SendNetworkString(id,"nosocard")
EndIf
Case "bouh_box"
MessageRequester("Bouh!","Tu vas fliper mon vieux !",#mb_ok|#mb_iconstop)
EndSelect
Case 3 ; Fichier envoyé
fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt"
ReceiveNetworkFile(id,fichier$)
MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk)
Case 4 ; Client déconnecté
MessageRequester("Information","Le client "+Str(id)+" vient de se déconnecter.",#mb_ok|#mb_iconasterisk)
EndSelect
EndIf
Delay(20)
Until quit=1
CloseNetworkServer()
CloseWindow(#Window_0)
End
Else
MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop)
EndIf
End
Qu'ais-je fait ?
- Une mise en forme du code (TRES IMPORTANT)
- Créé la barre de status que tu utilse sans l'avoir créée.
- Déclaré la constante #crlf comme je pense que tu voulais qu'elle soit.
- Supprimé la fonction env() (A quoi servait-ellle ?)
- Mis un port moins important.
- Corrigé 2 fautes d'orthographe.
Normalement tout marche maintenant (d'après mes rapides tests).
Publié : ven. 30/juil./2004 13:01
par gansta93
Salut,
La fonction env() sert à extraire une variable d'environemant... une lib perso... et le #crlf est déjà deffini dans un resident... merci je vais tester ça... mais ça venait d'où le fait que ça ne répondait pas?
Publié : ven. 30/juil./2004 13:04
par Heis Spiter
Oki,

. Alors, si ca ne répondait pas, c'est car l'application était stoppé dès le début, puisque tu utilisais une barre de status non créée.
Publié : ven. 30/juil./2004 15:09
par gansta93
Re,
J'ai corriger la barre de statut... mais le client que voici ne provoque aucune réponse du serveur appart à la connection et à la déconnection.
Code : Tout sélectionner
If InitNetwork()
id=OpenNetworkConnection("localhost",22287)
If id
SendNetworkString(id,"playson")
Delay(4000)
SendNetworkString(id,"ouvcdrom")
Delay(4000)
SendNetworkString(id,"bouh_box")
Delay(4000)
CloseNetworkConnection(id)
EndIf
EndIf
End
J'ai voulu faire un client tout simple, c'est pourquoi je n'ai pas voulu mettre les éventuelles réponses du serveur car je sais qu'il ne doit y avoir aucun problème lors de l'initialisation du son ou du CDROM et puis pour un requester qui doit être fait par le serveur, rien à initialiser.
Pour les fichiers, j'ai essayé, ça marche bien bien en générant des nombres aléatoirs comme il le faut appart que ça devait être txt mais j'ai corrigé et ça marche... mais je ne comprand pas pourquoi ça ne répond pas aux requettes au niveau du serveur.
Publié : ven. 30/juil./2004 16:09
par Heis Spiter
Code : Tout sélectionner
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
EndEnumeration
#crlf = Chr(13)+Chr(10)
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur")
EndIf
If CreateStatusBar(0, WindowID())
AddStatusBarField(202)
EndIf
StatusBarText(0,0,"Serveur prêt :-)",#pb_statusBar_center)
EndIf
EndProcedure
If InitNetwork()
If CreateNetworkServer(21987)
Open_Window_0()
Repeat
Select WindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #Button_0
quit=1
EndSelect
Case #PB_Event_CloseWindow
quit=1
EndSelect
evenement = NetworkServerEvent()
If evenement
FreeMemory(*Buffer)
*Buffer = AllocateMemory(1000)
id = NetworkClientID()
Select evenement
Case 1 ; Nouveau client
MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop)
Case 2 ; Information ressue
ReceiveNetworkData(id, *buffer,1000)
datanet$ = PeekS(*buffer)
Select datanet$
Case "ouvcdrom"
If InitCDAudio()
EjectCDAudio(1)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "fercdrom"
If InitCDAudio()
EjectCDAudio(0)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "playson"
If InitSound()
If LoadSound(0, "%windir%\media\tada.wav")
PlaySound(0)
Delay(2000)
PlaySound(0)
Delay(2000)
FreeSound(0)
Else
SendNetworkString(id,"soundnol")
EndIf
Else
SendNetworkString(id,"nosocard")
EndIf
Case "bouh_box"
MessageRequester("Bouh!","Tu vas fliper mon vieux !",#mb_ok|#mb_iconstop)
EndSelect
Case 3 ; Fichier envoyé
fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt"
ReceiveNetworkFile(id,fichier$)
MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk)
Case 4 ; Client déconnecté
MessageRequester("Information","Le client "+Str(id)+" vient de se déconnecter.",#mb_ok|#mb_iconasterisk)
EndSelect
EndIf
Delay(20)
Until quit=1
CloseNetworkServer()
CloseWindow(#Window_0)
End
Else
MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop)
EndIf
End
Cela venait de ta fonction prand(). Il a suffit de la supprimer et de faire le même chose au bon endroit dans le serveur et ca marche

Publié : ven. 30/juil./2004 16:25
par gansta93
Merci beaucoup, ça marche!
Je croi que ma fonction ne marchait pas peut-être parce que je n'avais pas mis *buffer mais tout simplemant buffer. Pourquoi mait-on le *? certe une question de boullet, mais au moin je le serait un peiti moins une foie que je saurais ça

.
Publié : ven. 30/juil./2004 17:17
par Heis Spiter
J'avais essayé en mettant l'astérisque. Mais cela n'avait pas marché. Pour pourquoi on en met, c'est pour montrer que c'est un buffer. Mais je crois que certains n'en mettent pas...
Publié : ven. 30/juil./2004 17:34
par Chris
Selon l'aide, * désigne un pointeur, c'est à dire une variablede type long, destinée à contenir l'adresse d'une variable, et pas sa valeur
Code : Tout sélectionner
*Buffer = AllocateMemory(2) ; Alloue une zone mémoire de 2 octets
PokeW(*Buffer, 32000) ; Ecrit une valeur dans la zone mémoire
Buffer = PeekW(*Buffer) ; Récupère la valeur pour la mettre dans une variable
Debug *Buffer ; Retourne l'adresse de la zone mémoire
Debug Buffer ; Retourne la valeur de la variable
En résumé, *Buffer et Buffer sont deux variables différentes.
Et si j'ai dit une connerie, n'hésitez pas. FRAPPEZ FORT. (mais pas sur le tête)
