Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结网http://127.0.0.1/index.html strcpy(文件名[1],“index.htm”)应该产生错误,因为文件名[1]是字符,strcpy需要字符*。你是说strcpy(&file_name[1],“index.htm”)或可能st_C - Fatal编程技术网

结网http://127.0.0.1/index.html strcpy(文件名[1],“index.htm”)应该产生错误,因为文件名[1]是字符,strcpy需要字符*。你是说strcpy(&file_name[1],“index.htm”)或可能st

结网http://127.0.0.1/index.html strcpy(文件名[1],“index.htm”)应该产生错误,因为文件名[1]是字符,strcpy需要字符*。你是说strcpy(&file_name[1],“index.htm”)或可能st,c,C,结网http://127.0.0.1/index.html strcpy(文件名[1],“index.htm”)应该产生错误,因为文件名[1]是字符,strcpy需要字符*。你是说strcpy(&file_name[1],“index.htm”)或可能strcpy(文件名,“index.htm”)?您可能想要阅读您应该考虑对给定的反馈做出响应。否则人们可能会得出这样的结论:帮助你是浪费时间。特别是如果你再次发布相同的问题。 #include <stdio.h>

结网http://127.0.0.1/index.html
strcpy(文件名[1],“index.htm”)应该产生错误,因为
文件名[1]
字符
strcpy
需要
字符*
。你是说strcpy(&file_name[1],“index.htm”)或可能
strcpy(文件名,“index.htm”)?您可能想要阅读您应该考虑对给定的反馈做出响应。否则人们可能会得出这样的结论:帮助你是浪费时间。特别是如果你再次发布相同的问题。
#include <stdio.h>            
#include <stdlib.h>       
#include <string.h>         
#include <windows.h>      
#include <stddef.h>        
#include <process.h>      
#include <fcntl.h>       
#include <sys\stat.h>      
#include <io.h>              

#define OK_IMAGE  "HTTP/1.0 200 OK\r\nContent-Type:image/gif\r\n\r\n"
#define OK_TEXT   "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n"
#define NOTOK_404 "HTTP/1.0 404 Not Found\r\nContent-Type:text/html\r\n\r\n"
#define MESS_404  "<html><body><h1>FILE NOT FOUND</h1></body></html>"

#define  BUF_SIZE 1024    

#define  PORT_NUM 80              

int      Count;                 

void handle_get(void *in_arg);       
void do_end(void *server_s);        

void main()
{
  unsigned int         server_s;             // Server socket descriptor
  struct sockaddr_in   server_addr;          // Server Internet address
  unsigned int         client_s;             // Client socket descriptor
  struct sockaddr_in   client_addr;          // Client Internet address
  int                  addr_len;             // Internet address length


  WSADATA wsaData;
  WSAStartup(MAKEWORD(1,1), &wsaData);  

  server_s = socket(AF_INET, SOCK_STREAM, 0);       
  server_addr.sin_family      = AF_INET;            
  server_addr.sin_port        = htons(PORT_NUM);  
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
  bind(server_s, (struct sockaddr *)&server_addr, sizeof(server_addr));

  printf("HTTP Server Start.(Stop:ESC)\n");

  if (_beginthread(do_end, 0, (void*)&server_s) < 0) {
    printf("ERROR - Unable to create thread \n");
    exit(1);
  }

 
  while(1)
  {
 
    listen(server_s, 50);
    addr_len = sizeof(client_addr);


    client_s = accept(server_s, (struct sockaddr*)&client_addr, &addr_len);
    if (client_s == -1)
    {
      printf("ERROR - Unable to create a socket \n");
      exit(1);
    }
    
    Count++;
    if (client_s == -1) {
      if(server_s) printf("ERROR - Unable to create a socket \n");
      exit(1);
    }

  
    if (_beginthread(handle_get, 0, (void *)client_s) < 0)
    {
      printf("ERROR - Unable to create a thread to handle the GET \n");
      exit(1);
    }
  }
  
}


void handle_get(void *in_arg)
{
  unsigned int   client_s;            
  char           in_buf[BUF_SIZE];     
  char           out_buf[BUF_SIZE];  
  int            fh;                  
  int            buf_len;             
  char           command[BUF_SIZE];   
  char           file_name[BUF_SIZE];  
  int            retcode;             
  int            i;                    


  client_s = (unsigned int) in_arg;

  retcode = recv(client_s, in_buf, BUF_SIZE, 0);

  if (retcode <= 0)
  {
    printf("ERROR - Receive failed --- probably due to dropped connection \n");
    Count--;
    closesocket(client_s);
    _endthread();
  }

  for (i=0; i<retcode; i++)
    printf ("%c", in_buf[i]);

  sscanf(in_buf, "%s %s \n", command, file_name);

  if (strcmp(command, "GET") != 0) {
    printf("ERROR - Not a GET --- received command = '%s' \n", command);
    Count--;
    closesocket(client_s);
    _endthread();
  }

 

  if(file_name[1]=='\0') {
      strcpy(file_name[1], "index.htm");
      fh = open(file_name[1], O_RDONLY | O_BINARY, S_IREAD | S_IWRITE);
       
    
  
  }
  else 
      fh = open(&file_name[1], O_RDONLY | O_BINARY, S_IREAD | S_IWRITE);

  if (fh == -1) {
    printf("File '%s' not found --- sending an HTTP 404 \n", &file_name[1]);
    strcpy(out_buf, NOTOK_404);
    send(client_s, out_buf, strlen(out_buf), 0);
    strcpy(out_buf, MESS_404);
    send(client_s, out_buf, strlen(out_buf), 0);
    Count--;
    closesocket(client_s);
    _endthread();
  }
  

  if (((file_name[1] == '.') && (file_name[2] == '.')) ||
       (file_name[1] == '/') || (file_name[1] == '\\') ||
       (file_name[2] == ':'))
  {
    printf("SECURITY VIOLATION --- trying to read '%s' \n", &file_name[1]);
    Count--;
    close(fh);
    closesocket(client_s);
    _endthread();
  }

  printf("Sending file '%s' \n\n\n", &file_name[1]);

  if (strstr(file_name, ".gif") != NULL)
    strcpy(out_buf, OK_IMAGE);
  else
    strcpy(out_buf, OK_TEXT);

  send(client_s, out_buf, strlen(out_buf), 0);

  while(!eof(fh)) {
    buf_len = read(fh, out_buf, BUF_SIZE);
    send(client_s, out_buf, buf_len, 0);


  }

  Count--;
  close(fh);
  closesocket(client_s);
  _endthread();
}

void do_end(void *server_s)
{
    unsigned int    temp;
    temp = *((unsigned int*)server_s);

    while(getch()!=27);
    while(Count);
    *((unsigned int*)server_s) = 0;

    printf("HTTP Server Stop.\n");
    closesocket(temp);

    WSACleanup();
    exit(1);
 if(file_name[1]=='\0') {
      strcpy(file_name[1], "index.htm");
      fh = open(file_name[1], O_RDONLY | O_BINARY, S_IREAD | S_IWRITE);

  }