suchen

Heim  >  Fragen und Antworten  >  Hauptteil

c++ – Webserver-Betriebsproblem in C-Sprache implementiert

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

void error_handling(char *message);

int main(int argc,char *argv[])
{
    int serv_sock;
    int clnt_sock;

    struct sockaddr_in serv_addr;
    struct sockaddr_in clnt_addr;
    socklen_t clnt_addr_size;

    char message[] = "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\nentity-body:<html>sdf</html>";
    
    
    if(argc!=2){
        printf("usage: %s <port>\n",argv[0]);
        exit(1);    
    }
    
    serv_sock = socket(PF_INET,SOCK_STREAM,0);
    if(serv_sock == -1)
        error_handling("socket() error");

    memset(&serv_addr, 0 ,sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(atoi(argv[1]));

    if(bind(serv_sock,(struct sockaddr*) &serv_addr,sizeof(serv_addr))==-1)error_handling("bind() error");

    if(listen(serv_sock,5)==-1)
        error_handling("listen() error");
    clnt_addr_size = sizeof(clnt_addr);
    clnt_sock = accept(serv_sock,(struct  sockaddr*)&clnt_addr,&clnt_addr_size);

    if(clnt_sock==-1)
        error_handling("accept() error");

    write(clnt_sock,message,sizeof(message));
    close(clnt_sock);
    close(serv_sock);
    return 0;

}
void error_handling(char *message)
{
    fputs(message,stderr);
    fputc('\n',stderr);
    exit(1);
}

Wenn Sie es unter Linux ausführen und in einem Browser darauf zugreifen, werden Sie aufgefordert, die Bin-Datei herunterzuladen. Wenn Sie es unter Win über Cygwin ausführen, können Sie nicht auf den Server zugreifen. Bitte sagen Sie mir, wie ich dafür sorgen kann, dass der Browser den im Code gesendeten HTML-Code empfängt

phpcn_u1582phpcn_u15822729 Tage vor1240

Antworte allen(1)Ich werde antworten

  • 淡淡烟草味

    淡淡烟草味2017-06-30 09:59:18

    不一定是程序的问题。你在用浏览器之前有没有试过在cygwin下telnet或者wget/curl 到端口看看是否可用?即使是linux,访问2048以下端口都是要管理员用户授权的。

    Antwort
    0
  • StornierenAntwort