[Résolu] Plusieurs instances serveur
[Résolu] Plusieurs instances serveur
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.
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.
Dernière modification par LeCyb le dim. 04/sept./2005 21:51, modifié 1 fois.
Vive le thread-safe !
J'aimerais bien pouvoir ouvrir plusieurs ports dans le même programme.
Du genre:
Le soucis c'est que les fonctions NetworkServerEvent et CloseNetworkServer ne supportent pas ces paramètres.
Du genre:
Code : Tout sélectionner
InitNetwork()
S1 = CreateNetworkServer(9999)
S2 = CreateNetworkServer(8888)
SEvent1 = NetworkServerEvent(S1)
SEvent2 = NetworkServerEvent(S2)
CloseNetworkServer(S1)
CloseNetworkServer(S2)
Vive le thread-safe !
-
- Messages : 1092
- Inscription : mer. 28/janv./2004 16:22
- Localisation : 76
- Contact :
J'appuie cette demande aussi.
J'en aurais besoin
J'en aurais besoin

Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL

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).
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
Dernière modification par LeCyb le lun. 05/sept./2005 9:11, modifié 1 fois.
Vive le thread-safe !
Code : Tout sélectionner
res = ...
If result = 0
tout ce qu'il y a de plus habituel sous windows.
Dri
