Compatibilité des Sockets avec les différentes versions de Windows - C++ - Programmation
Marsh Posté le 22-09-2004 à 18:41:42
Oui il y a des différences, mais normalement ça devrait être bon entre tes 2 windows, car il sont en WinSocket 2, tu mets quoi en paramètres dans WSAStartup() ?
Marsh Posté le 22-09-2004 à 18:48:09
Code :
|
Et tu peux tracer ton client ?
tu fais une gestion des erreurs ?
Attribution des sockets ?
Parceque vu ton code, faudrait tout de même voir à tester tous les retours, etc ... pour comprendre ce qui se passe.
Marsh Posté le 23-09-2004 à 09:36:01
alors en enlevant la gestion SSL, voici mon code :
Code :
|
Et l'erreur que j'obtiens est "erreur de connexion" donc c'est vraiment à la connexion que le problème se pose...
Marsh Posté le 23-09-2004 à 09:57:26
kestion kon ta pas un firewall sur ta machine?
Marsh Posté le 23-09-2004 à 10:01:43
Y'a un firewall sur le routeur mais pas sur les postes clients qu'on utilise. D'ailleurs c'est pas le problème puisque ca marche dans un sens (win2000 appelle le serveur sur win98 mais l'appli sur win98 n'appelle le serveur ni sous win2000 ni sous win98... )
Marsh Posté le 23-09-2004 à 10:12:07
Il n'y a pas de threads dans cette histoire à tout hasard?
Marsh Posté le 23-09-2004 à 10:19:11
EagleOne33 a écrit : |
Ok, mais là l'erreur est très générique, il faut utiliser WSAGetLastError() pour en savoir plus.
Marsh Posté le 23-09-2004 à 10:22:55
ReplyMarsh Posté le 23-09-2004 à 10:39:17
Ok j'essaye avec le WSAGetLastError et je teste en même temps le WSAStartup. Je vous dis ce qu'il en est après
Marsh Posté le 23-09-2004 à 10:54:04
bah y aurait déjà une erreur à socket() si c'était le WSAStartup() je pense.
Marsh Posté le 23-09-2004 à 11:09:46
cricri_ a écrit : bah y aurait déjà une erreur à socket() si c'était le WSAStartup() je pense. |
Oui. Il manque peut-être aussi un memset 0 sur la tronche de sin.
Marsh Posté le 23-09-2004 à 12:07:18
Bon j'ai récupéré le WSAGetLastError et il me met :
11001 .... hum.... J'en fais quoi moi ?
Marsh Posté le 23-09-2004 à 12:36:45
EagleOne33 a écrit : Bon j'ai récupéré le WSAGetLastError et il me met : |
Vous lisez le fichier winsock2.h. Le token correspondant à ce code d'erreur est explicite.
Marsh Posté le 23-09-2004 à 13:35:51
Alors mon erreur c'était pas 11001 mais 10065 (vi je m'étais trompé )
Et apparament, l'erreur correspond à ça :
"Connection refused by remote network
This error occurs when the remote system rejects your attempt to connect with it, either because no server is listening on the specified port or it's unable to accept any additional connections."
Mais je ne sais pas du tout d'ou ca peut venir...
Marsh Posté le 23-09-2004 à 13:37:01
EagleOne33 a écrit : Alors mon erreur c'était pas 11001 mais 10065 (vi je m'étais trompé ) |
et du côté du serveur, ça tourne bien?
Marsh Posté le 23-09-2004 à 13:43:34
Bein ouai... c'est ca qui est fou... Si je l'appelle depuis la même appli mais depuis un ordi sous win2000, il répond bien et tout
Marsh Posté le 23-09-2004 à 13:45:00
EagleOne33 a écrit : Bein ouai... c'est ca qui est fou... Si je l'appelle depuis la même appli mais depuis un ordi sous win2000, il répond bien et tout |
Donc il y a bien des threads, non?
Marsh Posté le 23-09-2004 à 13:50:52
Bein... des threads je crois pas... Y'a pas de fork si c'est à ca que tu penses.
Moi je fais que des sends de sockets et le serveur fait que des accept... Mais ptet que c'est ca que tu appelles des threads ?
Marsh Posté le 23-09-2004 à 13:52:37
en general un accept déclenche un thread pour gérer la connection, de façon à pouvir se remettre à l'écoute facilement.
Marsh Posté le 23-09-2004 à 13:55:04
ouai ok... admettons... et c'est ca qui pose problème vous pensez ?
Marsh Posté le 23-09-2004 à 13:59:15
perso je ne sais pas ou veut en venir Doc, moi je ne vois rien de spécial avec les threads.
Marsh Posté le 23-09-2004 à 13:59:58
cricri_ a écrit : en general un accept déclenche un thread pour gérer la connection, de façon à pouvir se remettre à l'écoute facilement. |
Ca peut s'il n'y a pas d'appels à CoInitialize en début de thread et CoUninitialize en fin. Sinon, à tout hasard, le serveur écoute les connections sur quelle adresse?
Marsh Posté le 23-09-2004 à 14:02:27
voilà le code de mon serveur :
Code :
|
Marsh Posté le 23-09-2004 à 14:11:15
vi : 123/tcp Network Time Protocol
Essaye un port supérieur non-utilisé pour voir, genre > 1000
Marsh Posté le 23-09-2004 à 14:16:01
cricri_ a écrit : Mais port 123 c'est qqchose qu'existe déjà ça, non ? |
c'est plus le listen non-testé qui me fait douter. Avec 1 en backlog, ça ne marcherait pas mieux?
Marsh Posté le 23-09-2004 à 14:21:42
euuu c'est à dire ? 1 en backlog ? C'est à dire je change quoi ?
je fais listen(serveur, 1) ?
Marsh Posté le 23-09-2004 à 14:23:03
EagleOne33 a écrit : euuu c'est à dire ? 1 en backlog ? C'est à dire je change quoi ? |
oui.
edit: enfin, vous pouvez mettre 5 tant qu'à y être. Et tester le retour de l'appel, ce serait pas mal aussi.
Marsh Posté le 23-09-2004 à 14:27:09
ca change un peu... En fait là depuis chez moi, ca marche
mais depuis win98, il lance le client, rien ne se passe, et au moment ou il ferme le client, y'a une requette (avec que des caractères n'importe comment) qui est recu par le serveur... Donc ils communiquent bien au moins, c'est déjà ca. Mais bon c'est pas ca quoi
Marsh Posté le 23-09-2004 à 14:31:16
EagleOne33 a écrit : ca change un peu... En fait là depuis chez moi, ca marche |
C'est qu'il doit y avoir d'autres appels miteux ailleurs.
Marsh Posté le 23-09-2004 à 14:35:01
bein j'ai mis tout mon code là... et je vois pas d'ou ca peut venir.... Surtout que ca marche très bien quand je lance de mon PC. Lui, il a essayé sous win2000,winXP,win98 et ca fait ce que je t'ai dit.
Alors n'y aurait il pas un problème de librairie ou je ne sais quoi ? un truc d'installé que sur mon ordi mais pas sur les autres ?
Marsh Posté le 23-09-2004 à 14:37:29
vi, il faut tester tous les retours pour voir plus précisemment d'où peut venir le pb.
T'as essayé tout de même avec un autre port ?
Marsh Posté le 23-09-2004 à 14:38:19
ouai je viens d'essayer avec le port 1123... mais ca ne change rien
Marsh Posté le 23-09-2004 à 14:46:20
Sinon tester les retours, c'est à dire ?
Tester ce que le serveur renvoit au client ? Justement rien...
Marsh Posté le 23-09-2004 à 14:51:06
non, comme te l'a dit Doc, tu ne testes pas le retour du Listen(), donc vérifie et teste tous les retours de fonctions sans exceptions.
Marsh Posté le 22-09-2004 à 18:09:22
Bonjour tout le monde,
Voilà je développe une application en C++ qui est un client. J'ai en même tps développé un serveur simple.
Je suis sous Windows2000. Si je lance le serveur sur mon ordinateur et que je lance le client, la communication passe bien entre les deux.
J'ai un collègue qui est sour Windows98 et s'il lance client et serveur chez lui, la connection ne marche pas (alors que la creation du socket a bien marché et que l'adresse du serveur est valide):
Maintenant si je lance le client de chez moi (win2000) et que je me connecte au serveur chez lui (win98), ca marche. L'inverse ne marchant pas...
Donc en gros pour moi, ou que soit le serveur, je m'y connecte. Mais lui n'arrive pas à s'y connecter...
D'ou ma question, existe-t-il des incompatibilités entre les différentes versions de Windows et les sockets ?
Merci d'avance