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

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

.
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
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
