Problème Multi winsock

cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016 - 9 sept. 2009 à 18:45
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016 - 31 oct. 2009 à 18:01
Bonjours,
Je post sur le forum car jai un petit problème qui est le suivant :

J'ai créé une application, un debut pour un RPG en réseau.
Donc on va dire 2 projets diffèrent le client et le server.
J'ai mis 2 Winsock sur le client, le premier pour le chat, sa marche du tonnerre et le seconde pour envoyer la donner "joueur connecter/déconnecter"

Mais le problème est au niveau du deuxième winsock :
Je lui dis de se connecter a son tour .. a la même adresse que le premier ..(Donc 127.0.0.1 étant donner que je lance sur mon PC le serveur et le client) mais a un port différent et la j'ai l'erreur suivante : "Adress in use".

Sur mon programme server j'ai également les deux winsock celui qui reçois les donner du chat et les renvoi a tout le monde (C'est en multiclient) et celui qui est sencer recevoir les donnes : "joueur connecter/déconnecter"

Quelqu'un pourrait-il m'aider a régler le problème du "adress in use"?

Merci d'avance
Cordialement MeSoD

16 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 sept. 2009 à 20:52
Salut
Cette erreur de port apparait-elle sur le socket client ou serveur ?
Côté client (celui qui se connecte), il ne faut pas préciser de port local, il le choisit seul.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
9 sept. 2009 à 20:58
Oui effectivement .. j'ai réussi a le régler ce problème par contre .. maintenant j'en n'est un autre ..

le winsock n°1 prend les donnée non seulement lui étant envoyer .. mais aussi les donnés envoyer au deuxième winsock et le deuxieme winsock ne reçois donc rien.

Avez vous une idée pour faire en sorte que le winsock 1 prenne les donnée lui étant envoyer et laisse passer les donnée envoyer au winsock 2 ?

Merci d'avance
cordialement MeSod
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 sept. 2009 à 00:19
C'est impossible : un Socket ne peut être en communication qu'avec un seul autre.
TCP ou UDP ?
Tes sockets sont-ils indexés ou des composants séparés ?
Vérifie à quel Socket appartiennent les DataArrival.
Quand tu reçois une demande de connexion de la part d'un client, comment le gères-tu ?
Est ce le socket récepteur qui fait le Accept ou bien charges-tu un nouveau socket indexé (bonne méthode) ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2009 à 08:28
Relis bien la dernièer phrase de Jack, elle est cruciale pour bien faire fonctionner n Winsock...


pour chaque vecteur de communication (chat et système)
tu devras avoir un winsock sur le client
et un sur le serveur, par client connecté + un pour écouter (attendre les connections)


Ainsi, le Winsock en attente sur le serveur écoute un port donné
lors de l'evenement ConnectionRequest, il te faut créer un nouveau Winsock (aisé grâce à un groupe de controles)
avec ce nouveau controle, tu feras un simple .Accept requestId

et hop! le client s'y connectera et ton winsock en écoute sera de nouveau prêt à être sollicité par un autre client.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
10 sept. 2009 à 08:37
Oui, j'arrive a connecter 2 socket entre eux .. donc le chat sa c'est bon.

Le probleme vien d'ailleur je fais un schéma se sera plus simple

[CLIEN] [SERVER]

WINSOCK1 ====================> WINSOCK1

WINSOCK2 ====================> WINSOCK2

Ci dessus se que j'aimerais qu'il se passe
Ci dessous se qui se passe réelement

[CLIEN] [SERVER]

WINSOCK1 ========== =========> WINSOCK1
/
WINSOCK2 ========== WINSOCK2

c'est sa que j'essaye d'expliquer .. et je veux ..que le winsock2 client communique avec le winsock2 server..
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 sept. 2009 à 09:37
lol, ce schéma ne m'aide pas à comprendre, pour moi, ils sont identiques, à la flèche prêt.
De toute façon, créer deux canaux de communication entre deux applis ne sert pas à grand chose.
Le Chat et les commandes techniques peuvent très bien passer par le même canal.

Je te conseille de fouiner parmi les codes sources qui parlent de Chat multi-client : Tu y apprendras comment gérer un socket Serveur réellement serveur, avec :
- un socket "en écoute" sur un Port
- le socket client demande une connexion au serveur
- le socket serveur reçoit la demande MAIS ne fait pas le Accept lui-même :
Il charge un socket indexé puis fait le Accept sur ce nouveau socket.
Le socket en écoute peut ainsi rester en écoute, ce qui n'est plus le cas s'il a fait un Accept lui-même.
Il te faut donc indexer les sockets : c'est ce que tu apprendras en consultant les sources.

Pour l'instant, ta question est trop vague pour y répondre efficacement.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
10 sept. 2009 à 12:24
Effectivement y'a eu un probleme de mise en forme

[CLIEN] ........................[SERVER]

WINSOCK1 ========== =========> WINSOCK1
.................../
WINSOCK2 ========== ...........WINSOCK2

(Les point étant juste pour la mise en forme .. )

Mais .. je comprend pas ce que tu veux dire .. faut donc que je dise au socket qui est en écoute de renvoyer les donnés reçu a d'autre socket sur le même serveur ?

Dans ce cas comment faire en sorte qu'il renvoie les donnée au bonne endroit ..?

Par exemple :
Si il reçois les donner d'une image comment lui faire comprendre qu'il doit les renvoyer au socket qui gère les images .. et non pas au socket du chat ?

Bon je vais aller fouiner sur quelque source en attendant ta réponse :/
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2009 à 12:31
humppppfff

le client possède un Winsock1
le serveur possède un Winsock2 et un Winsock3

Serveur:
Winsock2.LocalPort = 78
Winsock2.Listen

Client:
Winsock1.Connect "localhost", 78

Serveur:
Private sub Winsock2.ConnectionRequest(Byval requestID as integer)
Winsock3.Accept requestID
End Sub



Winsock2 ne sert donc pas a communiquer.

Winsock1 dialogue avec Winsock3


pas besoin d'avoir n vecteurs de communication, a toi d'inventer un protocole pour savoir si un message est complet, de quel type de message il s'agit, quoi en faire, etC.




Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
10 sept. 2009 à 12:35
ok merci beaucoup =)
je vais voir tout sa
Merci de m'avoir accorder un peu de ton temps et bonne prog a toi
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 sept. 2009 à 12:47
TCP ou UDP ?
TCP assure que le message sera délivré et renverra une info q'il ne l'ai pas
UDP, plus facile, mais ne garantit pas la délivrance du message
0
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
10 sept. 2009 à 12:52
C'est en TCP
0
toufou2006 Messages postés 89 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 17 février 2014 1
30 oct. 2009 à 15:49
Salut

Si tu as un probleme essaie de faire un serveur (si j ai bien compris )
et un serveur pour le chat

ils utilisent tous les 2 des ports different et tu demandes a ton client de se connecter au 2, et tu fais gaffe a bien gerer les 2 port

exemple serveur et client de winsock1 port = 203
exemple serveur & client de winsock2 port = 204

set config est ideal pour les jeux en 3D 'vrml' ou autre languague qui rafraichi la potition reguliere
0
toufou2006 Messages postés 89 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 17 février 2014 1
30 oct. 2009 à 15:50
ou alors j ai pas compris ce que tu demande
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 oct. 2009 à 16:26
en plus clair, toufou2006 propose de gérer deux canaux de communication dans ton jeu.

Un pour le jeu a proporement parler
L'autre pour le chat.

C'est envisageable, effectivement et peut permettre de bien séparer le code du chat et celui du moteur du jeu...


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
toufou2006 Messages postés 89 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 17 février 2014 1
30 oct. 2009 à 23:15
voila c est exactement ca, :) ^^

je suis brouillon ? mais dans ma tete aussi c est comme ca, y a tout
masi des fois ca sort plus vite que ne peuvent le faire mes doigts :) ^^
0
cs_MeSod Messages postés 89 Date d'inscription dimanche 21 septembre 2008 Statut Membre Dernière intervention 26 avril 2016
31 oct. 2009 à 18:01
Merci bien,
Je testerai ceci des que possible =)
Le projet etant a l'abandonner depui quelque temps suite a un probleme d'un des membre .. sa stagne .. mais je test des que possible =)
Encor merci
0
Rejoignez-nous