Adalah perkara biasa untuk menulis program klien soket untuk mengaksesnya Ia juga perkara biasa untuk menggunakan telent untuk mengaksesnya, tetapi apabila penyemak imbas mengaksesnya sebagai pelanggan, ia secara langsung melaporkan ralat dan tidak memasuki gelung sementara di. semua. Mengapa ini?
Akses penyemak imbas 127.0.0.1:8899
Atur cara pelayan keluar secara langsung dan melaporkan ralat: Kesalahan pembahagian (teras dibuang)
Kod pelayan mungkin kelihatan seperti ini
int main(int argc, char *argv[]){
if(argc != 2){
err_msg("Penggunaan: ./studyHttpd <alamat ip>\n");
}
struct sockaddr_in server_sock, client_sock;
int sockfd, client_fd;
int sin_size;
pthread_tntid;
if(-1 == (sockfd = soket(AF_INET, SOCK_STREAM, 0))) err_exit("soket");
printf("ID soket = %d\n", sockfd);
server_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 i = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, saiz(i));
if(-1 == bind(sockfd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))) err_exit("bind");
printf("Ikat kejayaan\n");
if(-1 == listen(sockfd, MAX_QUE_CONN_NM)) err_exit("dengar");
printf("Listening port = %d\n", PORT);
saiz_dosa = sizeof(client_sock);
/*Pelayar tidak akan melaksanakan langkah ini sama sekali, pelanggan lain akan berfungsi seperti biasa*/
manakala(1){
if(-1 == (client_fd = accept(sockfd, (struct sockaddr *) &client_sock, &sin_size))) err_exit("accept");
if(pthread_create(&ntid, NULL, (void *)handle, &client_fd) != 0) err_exit("pthread_create");
}
tutup(sockfd);
pulangan 0;
}
Pelayar menggunakan protokol http dan soket biasanya menggunakan protokol tcp/ip
Protokol http mempunyai tajuk khas Tanpanya, sudah tentu ia tidak boleh diakses