[petit client en C] Besoin aide svp!

globoeil Messages postés 6 Statut Membre -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous

Voilà depuis quelques semaines j'essaie vainement de développer un tout petit programme pourtant simple au niveau de beaucoup d'entre vous;

C'est un petit "visualiseur de tableaux";
Il se connecte à un site (en l'occurence http://s193648367.onlinehome.fr/Ghargantum/clientF/Map.php?x_min=0&y_min=0&x_max=50&y_max=25

Ce site renvoie simplement une requete traitée en Php lors de l'envoi de l'adresse. Ici c'est un tableau de 50*25.
Et tout ce que je veux, c'est pouvoir recevoir ce tableau et si possible pouvoir le rafraichir sans pour autant avoir à me reconnecter au site (donc en restant conecté), de manière à pouvoir le visualiser dans mon programme en C.

Je suis déja arrivé à une espèce de résultat, seulement je ne recois que les quelques premier octets d'un tableau de 1250 cases!

Voilà j'espère vraiment que vous pourrez m'aider.

Merci de tout coeur par avance
A voir également:

5 réponses

mamiemando Messages postés 34250 Date d'inscription   Statut Modérateur Dernière intervention   7 902
 
Quand je vais sur ton lien il n'y a que des 'T'. Et sinon tu utilises quoi comme fonction pour récupérer la page ?
0
globoeil Messages postés 6 Statut Membre
 
C'est normal pour les T et les autres letttres; elles constituent le tableau, mais il est donnée à l'état "brut" (c'est le programme qui reconstitue ces données en tableau une fois récupérées).

Pour récupérer la page, j'utilise:

char server_name[100]="82.165.51.33"; /* nom du host du serveur */
int port=80;//Port du serveur

int connectTo(){
struct sockaddr_in serverSockAddr; /* addresse de la socket */
struct hostent *serverHostEnt; /* description du host serveur */
long hostAddr; /* addr du serveur */
WSADATA wsaData;
WORD wVersionRequested;
int err;

printf("%s\nport:%d\n",server_name,port);

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("out WSAStartup : %X\n",WSAGetLastError());
exit(1);
}

/* initialise a zero serverSockAddr */
bzero(&serverSockAddr,sizeof(serverSockAddr));
/* converti l'adresse ip 9.100.1.1 en entier long */
hostAddr = inet_addr(server_name);
if ( (long)hostAddr != (long)-1)
bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
else /* si on a donne un nom */
{
serverHostEnt = gethostbyname(server_name);
if (serverHostEnt == NULL)
{
printf("out gethost : %X\n",WSAGetLastError());
//exit(0);
}
bcopy(serverHostEnt->h_addr,
&serverSockAddr.sin_addr,serverHostEnt->h_length);
}
serverSockAddr.sin_port = htons(port); /* host to network port */
serverSockAddr.sin_family = AF_INET; /* AF_*** : INET=internet */

/* creation de la socket */
if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("out creation socket client\n");
exit(0);
}

/* requete de connexion */
if(connect(to_server_socket,(struct sockaddr *)&serverSockAddr,
sizeof(serverSockAddr))<0)
{
printf("out demande de connection\n");
system("PAUSE");
exit(0);
}

}

Puis j'utilise pour récupérer mes données:

char fg[1000]="GET http://s193648367.onlinehome.fr/Ghargantum/clientF/Map.php?x_min=0&y_min=0&x_max=50&y_max=25HTTP/1.1 \r\nHOST:s193648367.onlinehome.fr \r\n\r\n";
writen(to_server_socket,fg,strlen(fg));
readn(to_server_socket,ouca,(xmin+1)*(xmax+1)*(ymin+1)*(ymax+1));

avec:
int writen(long int fd, char *ptr, long int n)
{
long int nl, nw;
nl = n;
while ( nl > 0 ) {
nw = send(fd, ptr, nl,0);
if ( nw <= 0 )
return nw; /*error*/
nl -= nw;
ptr += nw;
}
return (n-nl);
}

int readn(long int fd, char *ptr,long int n){
long int nl, nr;

nl = n;
while ( nl > 0 ) {
nr = recv(fd,ptr,nl,0);
if (nr < 0 )
return nr; /*error*/
else
if ( nr == 0 )
break;
nl -= nr;
ptr += nr;
}
}
0
mamiemando Messages postés 34250 Date d'inscription   Statut Modérateur Dernière intervention   7 902
 
C'est assez bizarre ce que tu fais, je ne suis pas sûre de tout comprendre. Je te conseille de repartir des sites suivants (malheureusement je ne fais jamais de socket mais le peu que j'ai vu de l'API me laisse penser que tu t'es compliqué la vie :p) :
sockfonc
http://www.pcs.cnu.edu/~dgame/sockets/sockets.html
https://codes-sources.commentcamarche.net/

Bonne chance
0
globoeil Messages postés 6 Statut Membre
 
Merci à toi
0

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

Posez votre question
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
heu... je voi pas ou est le problème.
un tableau de 50*25, ça fait 1250 cases non?
Le programme est assez compliquer, il merite de tester, mais à première vue, pas d'erreur énorme.
Je me trompe peut être, mais il est possible que le problème vienne d'ailleur.
Les serveurs http ont un temps de "latence" si aucune activité est détecter pendant environ 30s ils déconnectent. Pour moi ça viendrais de là.
Bonne chance dans la suite.
0