Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
C(Windows)程序无错误退出_C - Fatal编程技术网

C(Windows)程序无错误退出

C(Windows)程序无错误退出,c,C,我用一个小小的C程序来检查我的Web服务器是否活动以及其他东西,该程序读取带有IP地址或主机名的测试列表,并检查网页中的字符串;如果答案为真,那么一切正常,如果不是,我的程序退出。我做错了什么?这是我的密码: #include <stdio.h> #include <string.h> #include <winsock.h> #pragma comment(lib, "wsock32.lib") int isAlive(const char *addr)

我用一个小小的C程序来检查我的Web服务器是否活动以及其他东西,该程序读取带有IP地址或主机名的测试列表,并检查网页中的字符串;如果答案为真,那么一切正常,如果不是,我的程序退出。我做错了什么?这是我的密码:

#include <stdio.h>
#include <string.h>
#include <winsock.h>

#pragma comment(lib, "wsock32.lib")

int isAlive(const char *addr)
{
  struct sockaddr_in blah;
  struct hostent *he;
  WSADATA wsaData;
  int i;
  WORD wVersionRequested;
  SOCKET sock;

  char buff[1024];
  char *ex;
  ex="GET /alive.php HTTP/1.0\n\n";
  char *fmsg="ALIVE";  

  wVersionRequested = MAKEWORD(1, 1);
  if (WSAStartup(wVersionRequested , &wsaData)){
    printf("Winsock Initialization failed.\n");
    exit(1);
  }

  if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){
    printf("Can not create socket.\n");
    exit(1);
  }
  sock = socket(AF_INET,SOCK_STREAM,0);
  blah.sin_family = AF_INET;
  blah.sin_port = htons(80);
  blah.sin_addr.s_addr = inet_addr(addr);

  if ((he=gethostbyname(addr))!=NULL){
    memcpy((char *)&blah.sin_addr.s_addr,he->h_addr,he->h_length);
  }
  else{
    if((blah.sin_addr.s_addr=inet_addr(addr))==-1){
      WSACleanup();
      exit(1);
    }
  }

  if (connect(sock,(struct sockaddr*)&blah,sizeof(blah))==0){
    send(sock,ex,strlen(ex),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("ALIVE: %s\n", addr);
    }
  }

  closesocket(sock);
  WSACleanup();
  return(1);
}

int main(int argc,char *argv[])
{
  if(argc!=2){
    printf("Usage: checkalive [webservers list]\n");
    return(1);
  }

  char *inname = argv[1];
  FILE *infile;
  char line_buffer[BUFSIZ];
  char line_number;

  infile = fopen(inname, "r");
  if (!infile) {
    printf("Couldn't open file %s for reading.\n", inname);
    return 0;
  }

  line_number = 0;
  while (fgets(line_buffer, sizeof(line_buffer), infile)) {
    ++line_number;
    //printf("%s", line_buffer);
    isAlive(line_buffer);
  }
  return 0;
}

我建议先读一下调用的结果。然后我建议您通过IsAc能能能生死代码和双校验错误处理…< /P>是C++还是C?选择一个…C++的旧C语法,我知道是不赞成的,但我比C更常用,比旧C语法,可怕的C调用,通常是可怕的。有了你,我将使用返回而不是退出我的ISHOLD函数,现在正在工作。这条路对吗?