簡體   English   中英

C套接字編程,發送

[英]C socket programming, send

我寫了一個服務器,當瀏覽器嘗試連接到某些站點時,它會檢查黑名單並發回404,但是當我調用send()時沒有錯誤但是除非我沒有出現在Web瀏覽器上的消息關閉連接?

有什么建議?

接受來自瀏覽器的連接

while(1){
    connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen);
    if (connfd == -1) {
        perror ("unable to accept");
        return 1;
    }
    printf("%s:%d connected\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
    printf("%d",threadIndex);
    pthread_create(&(thread[threadIndex++]), NULL, processRequests, (void *)connfd);

    }

Process Requests方法發送代碼段:

if(blacklisted ==1){
                    printf("is blacklisted\n");
                    char *response404 = "HTTP:/1.1 404 not avaliable\r\n\r\n";

                    printf("%s\n",response404);
                    int len, bytes_sent;
                    len = strlen(response404);
                    bytes_sent = send(connfd, response404, len, 0);
                    if(len != bytes_sent){
                        perror("message length doesn't match");

                    }
            }

瀏覽器在分析和顯示頁面之前等待連接關閉。

沒有辦法解決。

在HTTP / 0.9和1.0中,連接在單個請求/響應對之后關閉。

在HTTP / 1.1中引入了keep-alive-mechanism,其中連接可以被重用於多個請求。

注意: Keepalive技術在這里沒有用,因為您要為連接到特定位置的每個客戶端發送一個頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM