php - ブラウザがクライアントとしてソケット サーバー プログラムにアクセスできませんか?
世界只因有你
世界只因有你 2017-05-16 13:03:22
0
1
506

ソケット クライアント プログラムを作成してアクセスするのが通常ですが、telent を使用してアクセスすることも通常ですが、ブラウザがクライアントとしてアクセスすると、エラーが直接報告され、while ループに入りません。なぜそうなるのですか?

ブラウザ アクセス 127.0.0.1:8899
サーバー プログラムが直接終了し、エラーが報告されました: セグメンテーション フォールト (コア ダンプ)

サーバーコードはおそらく次のようになります

int main(int argc, char *argv[]){
    
    if(argc != 2){
        err_msg("使用法: ./studyHttpd \n");
    }

    struct sockaddr_in サーバー_sock、クライアント_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);

    サーバー_sock.sin_family = AF_INET;
    サーバー_sock.sin_port = htons(PORT);
    サーバー_sock.sin_addr.s_addr = INADDR_ANY;
    bzero(&(server_sock.sin_zero), 8);

    int i = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
    
    if(-1 == binding(sockfd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr))) err_exit("bind");
    printf("バインド成功\n");

    if(-1 == listen(sockfd, MAX_QUE_CONN_NM)) err_exit("listen");
    printf("リスニング ポート = %d\n", PORT);

    sin_size = sizeof(client_sock);

    /*ブラウザはこのステップをまったく実行しません。他のクライアントは正常に動作します*/

    while(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 プロトコルには特別なヘッダーがあり、それがなければ当然アクセスできません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート