찾다

 >  Q&A  >  본문

php - 브라우저가 소켓 서버 프로그램에 클라이언트로 액세스하지 못합니까?

접근을 위해 소켓 클라이언트 프로그램을 작성하는 것이 일반적이지만, 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을 반환합니다.
}
世界只因有你世界只因有你2821일 전538

모든 응답(1)나는 대답할 것이다

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:05:22

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

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

    회신하다
    0
  • 취소회신하다