0

私はc(cygwin)でacソケットプログラムを作成しましたが、ブラウザにhtmlコードを送信したいと思います。

localhost:8888サーバーを作成しました。サーバーを実行してブラウザに入力すると、私のプログラムは正しいバイト数を送信すると言っていますが、私のブラウザは何も受信していないようです。

コードを送信:

#include<stdio.h>
#include<string.h>  //strlen
#include<sys/socket.h>
#include<arpa/inet.h>   //inet_addr
#include<unistd.h>  //write

int main(int argc , char *argv[])
{
    int socket_desc , new_socket , c;
    struct sockaddr_in server , client;
    char *message;

    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }

    //Prepare the sockaddr_in structure
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );

    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("bind failed");
        return 1;
    }
    puts("bind done");

    //Listen
    listen(socket_desc , 1);

    //Accept and incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);
    new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
    if (new_socket<0)
    {
        perror("accept failed");
        return 1;
    }

    puts("Connection accepted");


    char *reply = 
    "HTTP/1.1 200 OK\r\n<Content-Type: text/html\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<body>\r\n<h1>My First Heading</h1>\r\n<p>My first paragraph.</p>\r\n</body>\r\n</html>";
    int i = send(new_socket,reply,strlen(reply),0);
    printf("%d",i);
    shutdown(new_socket,2);
    return 0;
}

出力プログラム:

バインド完了

着信接続を待機しています

接続が受け入れられました

98

出力ブラウザ:

エラー103(net :: ERR_CONNECTION_ABORTED):不明なエラー

なにが問題ですか ?

4

3 に答える 3

0

データをブラウザに送信するには、サーバーが HTTP プロトコルを実装する必要があります。これは、ブラウザからのリクエストを待って解析し、データを含むレスポンスをブラウザに送信することを意味します。

HTTP に関する次の有用なリソースをご覧ください。

特に最初のものは、非常に理解しやすい情報を提供します。

于 2012-12-30T20:21:44.790 に答える
0

表示されていないコードがない限り、プログラムが応答で適切な HTTP ヘッダーを生成していない可能性があります。最小限の HTTP 応答は次のようになります。

HTTP/1.1 200 OK
Content-Type: text/html

Your HTML code goes here

各行は CR+LF ( ) で終了する必要があり、最後のヘッダーと本文の開始の間\r\nに 2 つの CR+LF ペア (例: ) が必要です。\r\n\r\n

于 2012-11-08T19:17:42.590 に答える
0

以下は、C で書かれた Web サーバーの例です。

これは、TCP 経由で転送される HTTP プロトコルを使用して、ブラウザーと Web サーバー間の通信を行う方法を示しています。

于 2012-11-08T19:23:28.100 に答える