infinite link et sockets [C et Win] - C++ - Programmation
Marsh Posté le 14-04-2003 à 18:14:24
C'est pas que j'ai envie d'insister, mais là, je ne vois vraiment pas ...
Précisions sur le problème ... Je ne suis pas sur que ca puisse être appelé des précisions, mais bon ...
Si le gethostbyname foire et que j'essaye de me débrouiller avec des adresses IP, j'arrive à récupérer le hostent, mais par contre, je plante au connect avec une erreur qui n'est même pas donnée dans la doc ! ...
Marsh Posté le 14-04-2003 à 18:56:51
plein de questions (mais pas de reponse a ton pb) :
t'as essayé ton prog dans un autre réseau local ? (en gros avec un autre routeur)
ton client ftp marche en local, mais est-ce qu'il marche sur une machine directement connecté au net (et avec des ftp du net) ? En gros est ce ke le gethostbyname() marche dans ce cas la ?
sinon ca fait koi qd tu désactives le serveur ftp du routeur ?
Edit : t'es sous windows nan ? si oui t'as essayé de faire vite fait un chtit prog ftp avec les fcts InternetConnect(), FtpSetCurrentDirectory(), FtpPutFile(), etc ? ca devrait te prendre 10 min, juste pour voir si ce cas marche
Marsh Posté le 14-04-2003 à 22:39:45
Konar a écrit : plein de questions (mais pas de reponse a ton pb) : |
Merci de ton intérêt pour mes questions ... (questions aussi barbantes pour vous que pour moi )
Marsh Posté le 14-04-2003 à 23:16:22
Pour le dernier truc, le 'chtit prog ftp', justement, ca se fait sans les fonctions socks, mais avec juste des fct dédiées.
Par exemple le prog suivant (devrait) upload un fichier :
Code :
|
(manque ptet 2 ou 3 tests par ci par la, ainsi que les InternetCloseHandle(), mais le principe fonctionne nickel)
sinon pour ton pb j'aurais tendance a dire que c'est la faute au serveur ftp sur le routeur, mais si des clients ftp autres que le tien fonctionnent, alors non.
et ton prog il fonctionne comment si tu te connectes a un serveur ftp exterieur mais qui a une 'vraie' adresse ip (avec des chiffres koi) ?
Marsh Posté le 15-04-2003 à 00:04:55
Konar a écrit : Pour le dernier truc, le 'chtit prog ftp', justement, ca se fait sans les fonctions socks, mais avec juste des fct dédiées.
|
Seul problème : j'ai trouvé une lib Ftp pour éviter d'avoir à réécrire toutes les fonctions relatives au protocole ...
De plus, il vaut mieux que j'évite les fonctions Windows vu que c'est un module pour un moteur multi plate-formes ... A moins que je sois sur de pouvoir avoir un comportement similaire sur les autre plates-formes ...
Si je file une adresse IP, comme je l'ai dit dans mon 3ème post, j'arrive à avoir un pointeur sur la structure hostent (ce qu'est censé faire gethostbyname) mais par contre, je plante admirablement au connect et le code d'erreur retourné n'est pas documenté ...
Marsh Posté le 15-04-2003 à 02:58:56
un ptit bout de code de ton init socket serait le bienvenu
en attendant, que fait le bout de code suivant:
char host[200];
struct hostent *iptemp;
iptemp=gethostbyname(host);
if (iptemp) printf("%s : %s\n",host,inet_ntoa(*(struct in_addr*)iptemp->h_addr));
iptemp==0 peut-etre ? si oui que vaut host exactement ?
est-ce que ca marche pour host="forum.hardware.fr" par exemple ?
Marsh Posté le 15-04-2003 à 11:43:28
Ca me saoule ...
J'ai essayé les lignes que tu proposes et ca me fait toujours le même problème ...
le pointeur retourné est NULL => il ne trouve pas l'host. Pourtant, un simple ping fonctionne ... (et là, je suis sur la même machine sous IE et aucun pb ...)
Tu veux vraiment voir 'mon' initialisation de sockets ? (c'est une lib que j'ai reprise donc ce n'est pas vraiment la mienne, mais je n'ai pas cherché en détails ...)
Marsh Posté le 15-04-2003 à 15:46:51
... et ca retourne nul aussi pour host="forum.hardware.fr" ??
si oui, (et si tu resoud bien les noms avec un ping), t'as plus qu'a réinstaller tes libs
Marsh Posté le 15-04-2003 à 15:47:09
theShOcKwAvE a écrit : Ca me saoule ... |
WSAGetLastError() retourne quel code d'erreur ?
File toujours ton initialisation de sockets, on sait jms...
Marsh Posté le 15-04-2003 à 15:53:10
Deaddy a écrit : ... et ca retourne nul aussi pour host="forum.hardware.fr" ?? |
ouais ... Pour forum.hardware.fr, ca fait pareil ... Mais ce qui me surprend le plus, c'est qu'en prenant mon exe, je me mets sur le routeur et ca passe ...
Je poste l'init des sockets dans un instant ...
Marsh Posté le 15-04-2003 à 16:01:10
Voilà le début de la fonction de connection de la lib que j'utilise ...
Code :
|
A noter donc que si je file une string contenant une adresse, je plante sur le connect ...
Marsh Posté le 15-04-2003 à 16:03:25
ptite question bete, au cas ou: si t sous windows, t'as pas oublie le
WSAStartup(0x101,&wsadata);
avant le gethostbyname ?
Marsh Posté le 15-04-2003 à 16:08:03
Konar a écrit : |
Héhéhé ... Boolay inside (je parle pour moi ... )
Je refais le test en initialisant la lib ... 2 minutes !
Marsh Posté le 15-04-2003 à 16:12:48
Bon ... Maintenant, j'ai le WSA startup (je reprends l'exemple vite fait que tu m'avais proposé plus haut ... J'avais fait le WSA startup dans mon autre appli ... pas de pb de ce côté là ...)
Erreur retournée par le gethostbyname : WSAHOST_NOT_FOUND
visiblement ... il ne doit pas trouver l'hôte ! (je suis malin ... )
Marsh Posté le 15-04-2003 à 16:27:36
essai avec ce prog (en ligne de commande)
http://deaddy.no-ip.org/solve.exe
usage: solve <host>
Marsh Posté le 15-04-2003 à 16:33:54
Deaddy a écrit : essai avec ce prog (en ligne de commande) |
si ca rate (et a mon avis ca va rater paske ton code parait bon et marche directement connecté au net), bah y a plus ka regarder au niveau de la conf du routeur, et a tester ton prog sur un autre réseau.
Marsh Posté le 15-04-2003 à 17:05:53
Konar a écrit : |
ce qui me chagrine, c'est que j'arrive à me connecter avec le client FTP sous DOS .... C'est ca qui me pousse à me dire que je dois faire une erreur ...
Marsh Posté le 15-04-2003 à 18:05:52
Deaddy a écrit : essai avec ce prog (en ligne de commande) |
Euuuuuuuh .... Ca marche ... Comment ca se fait ?
Tu peux me filer le source ? Je dois bien avoir fait une connerie quelque part bordel !
Marsh Posté le 15-04-2003 à 18:11:16
theShOcKwAvE a écrit : |
tu peux deja essayer de virer tout ce qui est entre le " pnum = strchr(lhost,':'; " et le "if ((sin.sin_addr.s_addr..." juste pour faire le gethostbyname() dès le debut.
Marsh Posté le 15-04-2003 à 18:15:40
donc le source, compilé sous Visual C++: (ya ptet des include en trop)
#include <stdio.h>
#include <windows.h>
#include <shellapi.h>
#include <winsock.h>
#include <io.h>
WSADATA wsadata;
void main(int argc,char* argv[])
{
struct hostent *iptemp;
if (argc<2) {printf("USAGE: %s <host>\n",argv[0]);exit(-1);}
WSAStartup(0x101,&wsadata);
if (argc==2)
{
iptemp=gethostbyname(argv[1]);
if (iptemp) printf("%s : %s\n",argv[1],inet_ntoa(*(struct in_addr*)iptemp->h_addr));
}
}
Marsh Posté le 15-04-2003 à 18:23:40
bah je sais pas trop en fait; réinstaller tout VC++ c lourd
au link g ajouter wsock32.lib; je te l'ai envoyer par mail
Marsh Posté le 08-04-2003 à 19:33:10
J'ai posté ce message dans la section réseaux, mais n'ayant toujours pas de réponse, je me suis dit que j'avais peut-être plus de chances d'en trouver ici ...
Voilà la situation :
Je fais une appli assez simple : un client FTP. Jusque là, tout va bien.
Pour accéder à Internet depuis ma machine, je passe par un routeur qui fait aussi office de serveur FTP ... (c'est un vieux PC qui tourne sous Win95 il me semble) Le routage des paquets se fait via "infinite link" ("ilink" pour les intimes )
Je reviens à mon client FTP qui marche nikel en réseau local.
Cependant, dès qu'il s'agit de correspondre avec une autre machine sur le net, la fonction gethostbyname(char *) retourne une erreur. Je n'arrive pas trop à déterminer d'où vient le problème étant donné que le client FTP standard de Windows arrive à se connecter à l'hôte que j'ai choisi.:heink:
Pourquoi ? Ne passe-t-il pas lui aussi par un gethostbyname ? C'est une fonction du système, non ?
Message édité par theshockwave le 14-04-2003 à 18:22:14