Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
RIO dummy mioche

Inscrit le: 09 Juil 2003 Messages: 3
|
Posté le: Jeu Sep 18, 2003 1:38 pm Sujet du message: protocole HTTP: Client GCC : 'Bad Description File' |
|
|
Salut,
Lors de l'exécution du client HTTP (en C), le read provoque met errno à 9 (Bad Description File). Pourtant, tout est OK (création socket, connexion).
any idea ?
PS je suis sur Windows NT et j'ai du changé qques includes |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mar Sep 23, 2003 12:47 pm Sujet du message: |
|
|
quels code exactement utilisez vous ? quel compilateur ? sur quel site la requete ? _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
RIO dummy mioche

Inscrit le: 09 Juil 2003 Messages: 3
|
Posté le: Mar Sep 23, 2003 1:54 pm Sujet du message: |
|
|
Le code a été compilé par g++ (IDE : DEV-CPP). La requete passe par un proxy. La requete est http://java.sun.com/index.html
Voila le code incriminé :
#include <windows.h>
#include <string.h>
#include <fstream>
#include <map>
#define IDC_MAIN_EDIT 101
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define CONF_FILE "http.host"
#define PACKET_SIZE 1024
#include <stdio.h> /* Definitions for stream input/output. */
#include <errno.h> /*Defines the system error variable errno and the error
numbers set by system calls. Errors which exist in Unix(tm)
but not MSDOS have value -1.*/
#include <signal.h> /*Definitions for ANSI defined signaling capability */
#include <unistd.h> /*This file is part of the Mingw32 package. */
#include <stdlib.h>
#include <iostream>
void requete(void);
//int to_server_socket = -1;
char server_name[100]; // nom du host du serveur
int port = 8080;
char request_host[PACKET_SIZE];
char request_path[PACKET_SIZE];
struct sockaddr_in serverSockAddr;
struct hostent *serverHostEnt;
unsigned long hostAddr;
//SOCKADDR_IN sin;
int ind=-1;
SOCKET sock;
using namespace std;
void TraiteRequete();
int readn(int fd, char *ptr, int n);
int main () {
TraiteRequete();
system("PAUSE");
return 0;
}
void TraiteRequete(){
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
cout<<"===================================================================\n";
/* initialise a zero serverSockAddr */
memset((void *)&serverSockAddr,sizeof(serverSockAddr),0);
/* converti l'adresse ip 9.100.1.1 en entier long */
hostAddr = inet_addr(server_name);
if ( (long)hostAddr != (long)-1)
memcpy((void *)&hostAddr,(void *)&serverSockAddr.sin_addr,
sizeof(hostAddr));
else /* si on a donné un nom */
{
serverHostEnt = gethostbyname(server_name);
if (serverHostEnt == NULL) {
printf("probleme gethost\n");
exit(1);
}
memcpy((void *)serverHostEnt->h_addr,
(void *)&serverSockAddr.sin_addr,serverHostEnt->h_length);
}
serverSockAddr.sin_port = htons(8080); /* host to network port */
serverSockAddr.sin_family = AF_INET; /* AF_*** : INET=internet */
serverSockAddr.sin_addr.s_addr = inet_addr("10.254.97.12");
/* creation de la socket */
if ( (ind = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("probleme de creation socket client\n");
exit(2);
}
/* requete de connexion */
if(connect(ind,(struct sockaddr *)&serverSockAddr,
sizeof(serverSockAddr))<0)
{
printf("probleme demande de connection\n");
exit(3);
}
requete();
/* fermeture de la connection */
shutdown(ind,2);
close(ind);
cout << "connexion close\n";
//return 1;
}
void requete (void) {
char buffer[PACKET_SIZE+1];
char line[PACKET_SIZE+2];
int rc;
static unsigned char isEntete = 1;
char *finEntete;
FILE *bulk, *entete;
sprintf(buffer,"Vide\n");
sprintf(line,"GET http://java.sun.com/index.html HTTP/1.1\r\n"
//"Host: %s\r\n"
"Host: java.sun.com\r\n"
"Proxy-Authorization : Basic cmlvanA6bWFyaW9uMDk\r\n"
//"Accept : image/gif, image/x-xbitmap, image/jpeg,"
//" image/pjpeg, image/png, */*\r\n"
// authentification sample
"\r\n"
,request_path,request_host);
cout<<"===================================================================\n";
cout<<"requete : \n";
printf(line);
cout<<"===================================================================\n";
printf ("socket : %d\n",ind);
int se = send(ind,line,strlen(line)+1,0);
printf("Send!!! %d\n",se);
int index = 0,d;
cout<<"===================================================================\n";
if ( ( bulk = fopen("bulkhttp.txt","wb")) == NULL ) {
printf ( "can't open file to write bulk\n" );
exit(1);
}
if ( ( entete = fopen("entete.txt","wb")) == NULL ) {
fclose(bulk);
printf ( "can't open file to write entete\n" );
exit(1);
}
do {
sprintf(buffer," ");
d = readn(ind,buffer,PACKET_SIZE);
cout << buffer;
/*
cout <<"===============================================================\n";
cout<<buffer<<'\n';;
cout <<"===============================================================\n";
*/
if ( isEntete == 1 ) {
finEntete = (char *)strstr(buffer,"\r\n\r\n");
if ( finEntete != NULL ) {
*finEntete = 0x00;
fwrite(buffer,1,strlen(buffer),entete);
fwrite(finEntete+4,1,rc-strlen(buffer)-4,bulk);
isEntete = 0;
}
else
fwrite(buffer,1,d,bulk);
fclose(entete);
}
else
fwrite(buffer,1,d,bulk);
} while ( d > -1 ) ;
fclose(bulk);
}
int readn(int fd, char *ptr, int n){
int nl, nr;
cout << "fd : " << fd <<'\n';
nl = n;
while ( nl > 0 ) {
nr = read(fd,ptr,nl);
cout << ptr<<'\n';
if (nr < 0 ){
cout << "nr : " << nr<<'\n';
cout <<"errno : " << errno << '\n';
return nr; /*error*/
}
else
if ( nr == 0 )
break;
nl -= nr;
ptr += nr;
}
*ptr = 0x00;
//cout <<"n-nl : " <<n-nl <<'\n';
cout << ptr;
return (n-nl);
} |
|
Revenir en haut |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|