Il est normal d'écrire un programme client socket pour y accéder. Il est également normal d'utiliser telent pour y accéder, mais lorsque le navigateur y accède en tant que client, il signale directement une erreur et n'entre pas dans la boucle while à tout. Pourquoi est-ce?
Accès au navigateur 127.0.0.1:8899
Le programme serveur s'est arrêté directement et a signalé une erreur : erreur de segmentation (core dumped)
Le code du serveur ressemble probablement à ceci
int main(int argc, char *argv[]){
si(argc != 2){
err_msg("Utilisation : ./studyHttpd <adresse IP>\n");
}
struct sockaddr_in serveur_sock, client_sock ;
int sockfd, client_fd;
int sin_size;
pthread_tntid;
if(-1 == (sockfd = socket(AF_INET, SOCK_STREAM, 0))) err_exit("socket");
printf("ID de socket = %d\n", sockfd);
serveur_sock.sin_family = AF_INET ;
server_sock.sin_port = htons(PORT);
server_sock.sin_addr.s_addr = INADDR_ANY ;
bzero(&(server_sock.sin_zero), 8);
int je = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
if(-1 == bind(sockfd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))) err_exit("bind");
printf("Liaison réussie\n");
if(-1 == écouter(sockfd, MAX_QUE_CONN_NM)) err_exit("écouter");
printf("Port d'écoute = %d\n", PORT);
sin_size = sizeof(client_sock);
/*Le navigateur n'exécutera pas du tout cette étape, les autres clients fonctionneront normalement*/
tandis que(1){
if(-1 == (client_fd = accept(sockfd, (struct sockaddr *) &client_sock, &sin_size))) err_exit("accepter");
if(pthread_create(&ntid, NULL, (void *)handle, &client_fd) != 0) err_exit("pthread_create");
}
fermer(sockfd);
renvoie 0 ;
}
Le navigateur utilise le protocole http et le socket utilise généralement le protocole tcp/ip
Le protocole http a un en-tête spécial sans lui, bien sûr, il n'est pas accessible
.