Page 1 sur 1

Pourquoi mon serveur ne tourne qu'en local ?

Publié : sam. 21/mars/2009 10:41
par KrisJNT
Voici mon serveur :

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 = Val(InputRequester("Port", "Entrez le port de communication (6000-7000)", "6279"))
*Buffer = AllocateMemory(65536)
Dim ClientList(31)
Client = 0

If CreateNetworkServer(0, Port)
	AddGadgetItem(#text, -1, "Serveur créé : port "+Str(Port), Port)

	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)
					ClientList(Client) = ClientID
					Client = Client + 1
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel+1)
					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, -1,#PB_UTF8)
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel+1)
					itemSel = itemSel + 1
					For i = 0 To 31
						If ClientList(i)
							SendNetworkString(ClientList(i), PeekS(*Buffer, -1,#PB_UTF8))
						EndIf
					Next
					FreeMemory(*Buffer)
					*Buffer = AllocateMemory(65536)
				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+1)
					;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)
					For i = 0 To 31
						If ClientID = ClientList(i)
							ClientList(i) = 0
						EndIf
					Next
					AddGadgetItem(#text, -1, Date$)
					SetGadgetState(#text, itemSel+1)
					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
L'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 )
      ListViewGadget(#text, 0, 0, 350, 280)
  EndIf
EndProcedure
Voila : ce code ne fonctionne qu'avec 127.0.0.1 quand j'essaye de me connecter avec le coté client :

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)))
	If Not hConnect
		SetGadgetText(#connect, "Connexion")
		DisableGadget(#send, 1)
	Else
		SetGadgetText(#connect, "Déconnexion")
		DisableGadget(#send, 0)
	EndIf

Repeat
		Delay(1)
		Event = WindowEvent()
		If hConnect
			NEV = NetworkClientEvent(hConnect)
		EndIf
		If NEV
			ReceiveNetworkData(hConnect, *Buffer, 65536)
			st$ = PeekS(*Buffer, -1, #PB_UTF8)
			FreeMemory(*Buffer)
			*Buffer = AllocateMemory(65536)
			AddGadgetItem(#chatroom, -1, st$)
		EndIf
		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")
							DisableGadget(#send, 0)
						Else
							MessageRequester("Erreur !", "La connexion a échoué !")
						EndIf
					Else
						CloseNetworkConnection(hConnect)
						SetGadgetText(#connect, "Connexion")
						DisableGadget(#send, 1)
					EndIf
				Case #send
					If GetGadgetText(#message) And GetGadgetText(#pseudo)
						text.s = GetGadgetText(#pseudo) + " dit :" + Chr(13) + Chr(10) + GetGadgetText(#message)
						SetGadgetText(#message, "")
						SendNetworkString(hConnect, text)
						SetActiveGadget(#message)
					EndIf
			EndSelect
		EndIf
	Until WindowEvent() = #PB_Event_CloseWindow
	If hConnect
		CloseNetworkConnection(hConnect)
	EndIf
	CloseWindow(#chat)
End
L'include :

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 )
      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)
      
      SendMessage_(GadgetID(#chatroom), #EM_AUTOURLDETECT, 0, 0)
  EndIf
EndProcedure
Merci de votre aide !

Publié : sam. 21/mars/2009 14:10
par cha0s
Si tu lance le client en local c'est normal que tu ne puisse accéder au serveur que en localhost dans le cas contraire il faut penser a ouvrir le port du routeur. Par exemple Poshu accède a mon serveur SVN grâce a mon ip 7x.xx.xx.xx tandis que moi je doit utiliser l'adresse locale 192.168.1.x car c'est sur une machine de mon réseau.

Publié : sam. 21/mars/2009 18:08
par venom
oui tu doit montrée au client l'ip publique.
en locurence celle-ci




@++

Publié : sam. 21/mars/2009 18:43
par KrisJNT
et... je fais comment ? :wink:

Même Question - local OK - UDP bizarre

Publié : jeu. 23/avr./2009 23:41
par kerkael
Bonjour,

J'en suis aussi au début du code réseau, et ma question est presque la même :
- en ip locale, client et serveur s'échangent des messages
- dès que j'utilise mon IP publique, le client me dit établir la connexion et envoyer ses messages, mais pas le serveur ne bronche pas !

J'ai tué mon firewall, ouvert le port sur mon routeur, mais bof.

J'ai choisi le mode UDP parce qu'en TCP le client disait ne pas établir de connexion (sur IP publique).

Du coup je sens bien que la question est celle du routeur/firewall :
- est-ce que je dois utiliser les fonctions de serveur virtuel en indiquant le port l'IP de redirection ?
- ou bien la fonction redirection de port qui me permet de définir une plage de ports ?

Mon routeur est un DLINK et sa doc n'est pas très explicite. En particulier, pour le serveur virtuel, je trouve un n°de port public à renseigner (celui que j'indique dans mon code PB, right ?) mais aussi un n° de port privé, et là, je sais pas quoi mettre.

Pourquoi le client dit qu'il établit une connexion si rien ne passe ensuite ?

V'là la capture de mon routeur : Image

Un grand merci pour vos aides.

Publié : jeu. 23/avr./2009 23:45
par kerkael
Argghghghg au temps pour moi !!!!

Quand j'ai tué mon firewall SEP, Windows a pris le relais et a lancé son propre firewall !!!!!

Dès que je l'ai eu tué à son tour, mes connexions sont bien reconnues par client et serveur.

Une grosse erreur de débutant, un firewall peut en cacher un autre.

Du coup, KrisJNT, je peux te répondre : trouve comment te connecter à ton routeur pour ouvrir le port TCP/UDP ou les deux que tu souhaites utiliser, et surtout ... Ferme les firewall (ou rajoute des exceptions si tu peux).

Publié : ven. 24/avr./2009 7:51
par KrisJNT
Ben... le problème c'est que c'est déjà fait ^^...

Publié : ven. 24/avr./2009 9:41
par kerkael
A okokoko. Je croyais le sujet encore ouvert. :wink: