php - 브라우저가 소켓 서버 프로그램에 클라이언트로 액세스하지 못합니까?
世界只因有你
世界只因有你 2017-05-16 13:03:22
0
1
522

접근을 위해 소켓 클라이언트 프로그램을 작성하는 것이 일반적이지만, Telent를 사용하여 접속하는 것도 일반적이지만, 브라우저가 클라이언트로 접속하면 바로 오류를 보고하고 에서 while 루프에 들어가지 않습니다. 다. 왜 그럴까요?

브라우저 액세스 127.0.0.1:8899
서버 프로그램이 직접 종료되었으며 오류를 보고했습니다: 분할 오류(코어 덤프)

서버 코드는 아마도 다음과 같습니다

int main(int argc, char *argv[]){
    
    if(argc != 2){
        err_msg("사용법: ./studyHttpd <ip 주소>\n");
    }

    struct sockaddr_in server_sock, client_sock;
    int sockfd, client_fd;
    int sin_size;
    pthread_t ntid;
    
    if(-1 == (sockfd = 소켓(AF_INET, SOCK_STREAM, 0))) err_exit("소켓");
    printf("소켓 ID = %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;
    setockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
    
    if(-1 == 바인딩(sockfd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))) err_exit("bind");
    printf("바인딩 성공\n");

    if(-1 == 듣기(sockfd, MAX_QUE_CONN_NM)) err_exit("듣기");
    printf("청취 포트 = %d\n", PORT);

    sin_size = sizeof(client_sock);

    /*브라우저는 이 단계를 전혀 실행하지 않으며 다른 클라이언트는 정상적으로 작동합니다*/

    동안(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");
    }
    닫기(sockfd);
    0을 반환합니다.
}
世界只因有你
世界只因有你

모든 응답(1)
过去多啦不再A梦

브라우저는 http 프로토콜을 사용하고 소켓은 일반적으로 tcp/ip 프로토콜을 사용합니다

http 프로토콜에는 특별한 헤더가 있습니다. 이 헤더가 없으면 당연히 액세스할 수 없습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿