Page 1 sur 1

[Résolu] Plusieurs instances serveur

Publié : sam. 03/sept./2005 16:22
par LeCyb
Cela me serait grandement utile de pouvoir lancer plusieurs instances de serveur réseau.
Peut-être en utilisant un paramètre dans la fonction NetworkServerEvent (du même genre que NetworkClientEvent) cela devriendrait possible.
En tout cas moi je suis fort bloqué par cette limitation.

Publié : dim. 04/sept./2005 13:09
par Flype
Syntaxe

ClientID = NetworkClientID()
Description

Cette fonction n'est nécessaire que sur le serveur. Elle permet de savoir quel client a envoyé des données.
bonjour, n'est-ce pas de ca dont tu a besoin ?

Publié : dim. 04/sept./2005 13:51
par Dr. Dri
il parle du serveur, pouvoir en créer plusieurs avec le même exe... tout comme on peut avoir plusieurs clients...

Dri

Publié : dim. 04/sept./2005 15:23
par LeCyb
J'aimerais bien pouvoir ouvrir plusieurs ports dans le même programme.

Du genre:

Code : Tout sélectionner

InitNetwork()
S1 = CreateNetworkServer(9999)
S2 = CreateNetworkServer(8888)

SEvent1 = NetworkServerEvent(S1)
SEvent2 = NetworkServerEvent(S2)

CloseNetworkServer(S1)
CloseNetworkServer(S2)
Le soucis c'est que les fonctions NetworkServerEvent et CloseNetworkServer ne supportent pas ces paramètres.

Publié : dim. 04/sept./2005 17:23
par gansta93
Et si tu appelles plusieur fois CreateNetworkServer(), puis qu'à chaque évènement tu prands par l'API de quel port vien le client ?

Publié : dim. 04/sept./2005 20:36
par LeCyb
Si je fais plusieurs CreateNetworkServer ça ouvre bien les ports mais comment les fermer ?

Tu as une idée de quelles fonctions utiliser de l'API ?

Publié : dim. 04/sept./2005 21:09
par Heis Spiter
J'appuie cette demande aussi.
J'en aurais besoin :oops:

Publié : dim. 04/sept./2005 21:48
par LeCyb
Après plusieurs recherches j'ai réussi à récupérer l'ip et le port distant et local ce qui peut arranger notre histoire.
Pour fermer la connexion j'ai simplement utilisé CloseNetworkConnextion :D.

Voici une petite librairie, mais attention les adresses IP sont au format Long Big Endian non-signés (càd DDCCBBAA si l'ip est AA.BB.CC.DD).

Code : Tout sélectionner

Structure ws_sockaddr
  Family.w
  Port.w
  IPLong.l
  zeros.l[8]
EndStructure

; Renvoit l'adresse IP distante de la connexion au format Long.
; Renvoit Zéro si la procédure a échouée
; THREAD SAFE
; Cnx [in] = connexion
ProcedureDLL.l RemoteIP(Cnx.l) ; Récupère l'adresse IP distante de la connexion
  Protected length.l, IP.ws_sockaddr, res.l
  length = SizeOf(IP)
  res = getpeername_(Cnx, @IP, @length)
  If res = 0
    ProcedureReturn IP\IPLong
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

; Renvoit le Port distant de la connexion
; Renvoit Zéro si la procédure a échouée
; THREAD SAFE
; Cnx [in] = connexion
ProcedureDLL.l RemotePort(Cnx.l) ; Récupère le port distant de la connexion
  Protected length.l, IP.ws_sockaddr, res.l
  length = SizeOf(IP)
  res = getpeername_(Cnx, @IP, @length)
  If res = 0
    ProcedureReturn IP\Port & $FFFF
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

; Renvoit l'adresse IP locale de la connexion au format Long
; Renvoit Zéro si la procédure a échouée
; THREAD SAFE
; Cnx [in] = connexion
ProcedureDLL.l LocalIP(Cnx.l) ; Récupère l'adresse IP local de la connexion
  Protected length.l, IP.ws_sockaddr, res.l
  length = SizeOf(IP)
  res = getsockname_(Cnx, @IP, @length)
  If res = 0
    ProcedureReturn IP\IPLong
  Else
    ProcedureReturn 0
  EndIf
EndProcedure


; Renvoit le Port local de la connexion
; Renvoit Zéro si la procédure a échouée
; THREAD SAFE
; Cnx [in] = connexion
ProcedureDLL.l LocalPort(Cnx.l) ; Récupère le port local de la connexion
  Protected length.l, IP.ws_sockaddr, res.l
  length = SizeOf(IP)
  res = getsockname_(Cnx, @IP, @length)
  If res = 0
    ProcedureReturn IP\Port & $FFFF
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Publié : lun. 05/sept./2005 6:50
par Dr. Dri

Code : Tout sélectionner

  res = ...
  If result = 0
result sera toujours égal à 0 dans tes fonctions... Sinon le format de l'ip c'est comme le format RGBA ^^
tout ce qu'il y a de plus habituel sous windows.

Dri ;)

Publié : lun. 05/sept./2005 9:15
par LeCyb
Bien vu j'ai modifié la petite faute :)

Publié : lun. 05/sept./2005 12:51
par Dr. Dri
tu es sûr que si res = 0 alors la fonction n'a pas rencontré d'erreur ? (juste vérifie ^^)

Dri

Publié : lun. 05/sept./2005 17:47
par LeCyb
Vivi c'est marqué dans le msdn.
Maintenant si chez krosoft ils écrivent des conneries là je peux rien faire :D