Page 1 sur 1

Récupérer les données du serveur

Publié : mar. 25/nov./2008 18:43
par KrisJNT
Bonjour à tous !

Je suis en train de faire un petit programme de chat, et j'ai encore du mal à récupérer les données du serveur. Lorsqu'une chaîne de caractère est envoyée vers le serveur, je n'arrive pas à la récupérer depuis le programme client tout simplement parce que NetworkServerEvent() et NetworkClientEvent() me renvoient 0 côté client... Peut-être que cela peut vous aider : dans mon programme de serveur, j'ai choisi d'afficher tous les évènements dans une ListGadget. Le programme serveur, lui fonctionne très bien de ce côté là, je n'ai pas de problème d'encodage des données, ni de buffer. Mais c'est vraiment côté client que ça ne va pas...

Je pense que la question a sans doûte déjà été posée, mais plus de 1500 résultats dans le moteur de recherche du forum... Ca décourage !

Merci pour vos réponses,

@++ :D

Publié : mar. 25/nov./2008 19:08
par Ar-S
Salut, sans code c'est pas facile de t'aider non plus !

Tu as regardé l'exemple de la doc ?? Network Index
Tu as un code client et un code serveur.

Publié : jeu. 27/nov./2008 20:30
par KrisJNT
J'ai en effet regardé le code, mais il ne m'a pas aidé...
Voici les sources :

Côté client :

-- Chatroom.pb :

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

IncludeFile "Common.pb"

Open_chat()
AddKeyboardShortcut(#chat, #PB_Shortcut_Control | #PB_Shortcut_Return, #send)
SetGadgetState(#IP, MakeIPAddress(127, 0, 0, 1))
*Buffer = AllocateMemory(65536)
Global hConnect
						InitNetwork()
						hConnect = OpenNetworkConnection(IPString(GetGadgetState(#IP)), Val(GetGadgetText(#port)))
						SetGadgetText(#connect, "Déconnexion")

Repeat
		Delay(1)
		Event = WindowEvent()
			Debug NetworkClientEvent(hConnect)
			;Debug ReceiveNetworkData(hConnect, *Buffer, 65536)
			;st$ = PeekS(*Buffer, Len(PeekS(*Buffer))+4,#PB_UTF8)
			;FreeMemory(*Buffer)
			;*Buffer = AllocateMemory(65536)
			;SetGadgetText(#chatroom, GetGadgetText(#chatroom)+Chr(10)+Chr(13)+st$)
		If Event = #PB_Event_Gadget
			Select EventGadget()
				Case #connect
					text$ = GetGadgetText(#connect)
					If text$ = "Connexion"
						hConnect = OpenNetworkConnection(IPString(GetGadgetState(#IP)), Val(GetGadgetText(#port)))
						If hConnect
							SetGadgetText(#connect, "Déconnexion")
						Else
							MessageRequester("Erreur !", "La connexion a échoué !")
						EndIf
					Else
						CloseNetworkConnection(hConnect)
						SetGadgetText(#connect, "Connexion")
					EndIf
				Case #send
					text.s = GetGadgetText(#message)
					SendNetworkString(hConnect, text)
			EndSelect
		EndIf
	Until WindowEvent() = #PB_Event_CloseWindow
	If hConnect
		CloseNetworkConnection(hConnect)
	EndIf
	CloseWindow(#chat)
End
-- Common.pb :

Code : Tout sélectionner

;
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #chat
EndEnumeration

;- Gadget Constants
;
Enumeration
  #send
  #chatroom
  #pseudo
  #tPseudo
  #message
  #IP
  #tIP
  #tPort
  #port
  #connect
EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Trebuchet MS", 10)

Procedure Open_chat()
  If OpenWindow(#chat, 216, 0, 640, 480, "IrisChatroom",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    If CreateGadgetList(WindowID(#chat))
      ButtonGadget(#send, 275, 80, 95, 25, "Envoi", #PB_Button_Default)
      SetGadgetFont(#send, FontID1)
      EditorGadget(#chatroom, 0, 110, 640, 340, #PB_Editor_ReadOnly)
      SetGadgetFont(#chatroom, FontID1)
      StringGadget(#pseudo, 355, 455, 195, 20, "")
      TextGadget(#tPseudo, 280, 455, 80, 20, "Pseudo :", #PB_Text_Center)
      SetGadgetFont(#tPseudo, FontID1)
      EditorGadget(#message, 0, 0, 640, 75)
      SetGadgetFont(#message, FontID1)
      IPAddressGadget(#IP, 40, 455, 115, 20)
      TextGadget(#tIP, 0, 455, 40, 20, "IP :", #PB_Text_Center)
      SetGadgetFont(#tIP, FontID1)
      TextGadget(#tPort, 165, 455, 40, 20, "Port :", #PB_Text_Center)
      SetGadgetFont(#tPort, FontID1)
      StringGadget(#port, 210, 455, 70, 20, "6279", #PB_String_Numeric)
      SetGadgetFont(#port, FontID1)
      ButtonGadget(#connect, 555, 455, 80, 20, "Connexion")
      SetGadgetFont(#connect, FontID1)
    EndIf
  EndIf
EndProcedure
Côté serveur :

-- General.pb :

Code : Tout sélectionner

IncludeFile "Include.pb"

If InitNetwork() = 0
	MessageRequester("Erreur", "Impossible d'initialiser le serveur !", 0)
	End
EndIf

Global boolState = 0, itemSel = 0

Open_serv()

HideWindow(#serv, boolState)

AddSysTrayIcon(1, WindowID(#serv), LoadImage(0, "16.ico"))
SysTrayIconToolTip(1, "Serveur chat")

Port = 6279
*Buffer = AllocateMemory(65536)

If CreateNetworkServer(0, Port)
	MessageRequester("Serveur", "Serveur créé (Port "+Str(Port)+").", 0)

	Repeat
		SEvent = NetworkServerEvent()
		If SEvent
			ClientID = EventClient()
			Select SEvent
				Case 1 ;Nouveau client
					Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un nouveau client s'est connecté : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel)
					itemSel = itemSel + 1
				Case 2 ;Paquet reçu
					Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client a envoyé un paquet : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
					;ReceiveNetworkData(ClientID, *Buffer, 65536)
					;Date$ = Date$+" -> "+PeekS(*Buffer, Len(PeekS(*Buffer))+4,#PB_UTF8)
					;FreeMemory(*Buffer)
					;*Buffer = AllocateMemory(65536)
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel)
					itemSel = itemSel + 1
				Case 3 ;Fichier reçu
					Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client a envoyé un fichier : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
					AddGadgetItem(#text, -1, Date$)
					ReceiveNetworkFile(ClientID, SaveFileRequester("Où enregistrer ?", "C:\", "*.*", 1))
					SetGadgetState(#text, itemSel)
					itemSel = itemSel + 1
				Case 4 ;Client parti
					Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client s'est déconnecté", Date()) + " ->ID : "+Str(ClientID)
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel)
					itemSel = itemSel + 1
			EndSelect
		EndIf
		Event = WindowEvent()
		If Event = #PB_Event_SysTray
			If EventType() = #PB_EventType_LeftDoubleClick
				boolState = boolState XOr 1
				HideWindow(#serv, boolState)
			EndIf
		EndIf
		If Event = #PB_Event_CloseWindow
			CloseWindow(#serv)
			Quit = 1
		EndIf
		If Event = #PB_Event_SizeWindow
			ResizeGadget(#text, 0, 0, WindowWidth(#serv), WindowHeight(#serv))
		EndIf
	Delay(1)
	Until Quit = 1 
	CloseNetworkServer(0)
Else
	MessageRequester("Erreur", "Impossible de créer le serveur. Il est probable que le port soit déjà utilisé.", 0)
EndIf
End
-- Include :

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #serv
EndEnumeration

;- Gadget Constants
;
Enumeration
  #text
EndEnumeration


Procedure Open_serv()
  If OpenWindow(#serv, 5, 5, 350, 280, "Serveur IrisChatroom version 1.0.0",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#serv))
      ListViewGadget(#text, 0, 0, 350, 280)
    EndIf
  EndIf
EndProcedure
Bon courage :)
Et merci pour votre aide !