Pbm avec les sockets Client et Server de Delphi !

Pbm avec les sockets Client et Server de Delphi ! - Delphi/Pascal - Programmation

Marsh Posté le 09-05-2002 à 21:07:46    

Euh... je ne sais pas par où commencer ! Bon, pour simplifier les choses, on va dire que j'utilise les sockets client et server dans 2 applications différentes (en fait c'est un petit jeu avec des fourmis, mais pour l'instant je fais des tests avec une appli réservée au client et une autre au serveur).
J'ai tout configuré (et dans mon code et dans l'inspecteurs d'objets) pour que le port soit à 600 (par ex), et que le client se connecte bien au serveur (dans le code comme dans l'inspecteur, le client se connecte  à l'ordi 'nico', nom de l'ordi où je fais tourner le serveur), de même dans le client comme dans le serveur je n'oublie pas d'ouvrir les sockets avec ClientSocket1.Open et ServerSocket1.Open !
Tout devrait donc être OK !
Mais lorsque je lance les 2 appli (qui se compilent et s'executent d'ailleurs sans aucun pbm) et que j'appuie sur une touche du clavier (côté serveur) qui correspond à l'envoie par le réseau de la chaîne 'nouvelle', eh bien ça plante avec un message d'erreur qui dit qqchose du genre 'le serveur a envoyé des données mais dans le vide' ! Donc j'en déduis que le Client n'est pas connecté au serveur et pourtant s'il ne l'était pas il me le dirait (le client) or il ne me dit rien !
Bon c'est un peu compliqué tout ça mais ce que j'aimeais simplement pour le moment, c'set que l'on m'aide à trouver ce que j'aurrai pu oublier de faire !
Est-ce qu'il faut mettre la propriéte Active du Server et du Client à True ou False (non ma question n'est pas idiote, il arrive que ça marche à False !) ou bien dois-je le faire dans mon code avec ClientSocket1.Active := true ou false ou ServerSocket1.Active := true ou false  
 
Ou bien y a-t-il autre chose que j'ai pu oublier ?!
 
merci beaucoup pour toute réponse ou conseil
@ très bientôt j'éspère
 
PS : NE VOUS LAISSEZ PAS DECOURAGER PAR LA LONGUEUR SVP !!!

 

[jfdsdjhfuetppo]--Message édité par gropoli le 09-05-2002 à 21:08:19--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 09-05-2002 à 21:07:46   

Reply

Marsh Posté le 09-05-2002 à 21:16:12    

Aller, lisez quoi !   :bounce:

Reply

Marsh Posté le 09-05-2002 à 21:47:44    

Est-ce que tu peux faire afficher un message par le serveur lorsqu'il reçoit la demande de connexion (histoire d'être sur que le client s'est bien connecté) ?
Vérifie aussi la procédure de connexion de la part du client.
 
PS : tu utilises TCP je suppose ?

Reply

Marsh Posté le 09-05-2002 à 22:31:59    

je ne connais pas la fonction à utiliser chez le serveur qui montre les demandes de connexions de client, mais le clien se connecte bien, j'ai vérifié avec une vieille appli cliente que j'avais faites et qui indique tout simplement si elle est connectée au serveur !
ah oui ok je sais je vais utiliser la propriété OnClientConnect pour en être vraiment certain !
bon je vais essayer ça et je te tiens au courant
merci beaucoup  
@+
 
ps : qu'est-ce que tu entends pat TCP, moi j'utilise les sockets de delphi !

Reply

Marsh Posté le 09-05-2002 à 22:39:19    

OUI ! le client se connecte bien au server donc le server ne devrait pas dire qu'il n'est pas connecté !
en fait voici plus précisement le message d'erreur :
 
"Le projet extv13.exe (nom de mon programme) a provoqué une classe d'exception ESocketError avec le message 'Erreur socket Windows : Une requête d'envoie ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoie sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie (10057), avec l'API 'send. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer."
 
Bon ! Alors tu y comprensd qqchose ?
merci de t'intéresser à mon pbm (car en plus c'est assez urgent)
@ bientôt

 

[jfdsdjhfuetppo]--Message édité par gropoli le 09-05-2002 à 22:45:54--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 09-05-2002 à 22:58:12    

gropoli a écrit a écrit :

ps : qu'est-ce que tu entends pat TCP, moi j'utilise les sockets de delphi !  



Y a principalement deux modes de communication par réseau IP :
- UDP : les machines s'échangent des paquets. Il n'y a pas réellement de notion de connexion.
- TCP : un client se connecte à un serveur. Le lien (bi-directionnel) permet d'échanger un flux de données.
 
Je sais pas trop comment fonctionnent les objets sockets de Delphi, mais tu dois avoir le choix pour la création.

Reply

Marsh Posté le 09-05-2002 à 23:06:56    

gropoli a écrit a écrit :

"Le projet extv13.exe (nom de mon programme) a provoqué une classe d'exception ESocketError avec le message 'Erreur socket Windows : Une requête d'envoie ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoie sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie (10057), avec l'API 'send. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer."



Tu ne devrais pas avoir 2 sockets côté serveur :??:  
 
Quand tu utilises directement l'API Win32, ca se passe comme ca (côté serveur) :
- tu crées une socket que tu mets sur le port que tu as choisi et qui attend les connexions
- lorsqu'une connexion arrive, la fonction qui était bloquée retourne un résultat, qui correspond à une nouvelle socket, connectée sur le client
- tu remets la première socket en attente (pour une autre demande de connexion)
 
Tu as ainsi 1 socket d'attente et 1 socket pour chaque client connecté. Mais la socket d'attente n'est jamais connectée à aucun client. Je suppose qu'on retrouve un peu les même notions avec les objets.

Reply

Marsh Posté le 09-05-2002 à 23:35:41    

Va voir là, ça t'aideras sûrement : http://membres.lycos.fr/forumikare [...] c.php?t=48
 
C'est du builder mais c'est kifkif avec delphi ;)

Reply

Marsh Posté le 09-05-2002 à 23:55:20    

Je viens de télécharger l'aide de Delphi. D'après ce que j'ai compris :
Lorsqu'une connexion arrive, un évènement OnGetSocket est généré, avec la nouvelle socket (celle qui est effectivement connectée au client).
C'est cette nouvelle socket que tu dois utiliser pour dialoguer avec le client.

Reply

Marsh Posté le 10-05-2002 à 11:52:17    

merci beaucoup mais le pbm c'est que j'ai déjà fais des appli client et serveur de chat (comme décrites dans ton lien) et elle marche nickel mais elle ne marche plus lorsqu'elle sont intégrées dans mon jeu ! ouai mais là il faudrai que je vous explique le fonctionnement interne du jeu et on a pas fini
c'est pas grave je vais encore chercher
merci beaucoup à tout les 2 et si vous avez quand même une idée, faites moi signe !  ;)  
encore merci  
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed