另一个connect无效参数C

问题描述

我正在探索用C语言编写的网络程序。该代码应该连接到端口80上的服务器,以发送http请求,并从响应打印输出到正在运行该网页的服务器上,但是它遇到了Invalid Argument错误。该错误是由于错误消息“ [ERR]连接到目标服务器:无效参数”而发生的,因此该错误应该在connect()函数中的某个位置。

rec = connect(sockfd,(struct sockaddr *)&target_addr,sizeof(struct sockaddr) == -1);
    if(rec == -1)
        fail("[ERR] connecting to target server");

尽管我已经看到很多类似的问题,但是这些修复都没有解决或不适用于这种情况,奇怪的是,此代码在解析argc [1]而不是char * name时可以作为独立程序运行,无论其确切含义是什么字符串文字是(ip或主机名,两者均尝试使用多个)。两者之间的唯一区别是,整个Web服务器功能是使用main函数和传递的命令行参数编写的(工作示例),而此处是作为独立函数编写的,并且是在main中进行调用的,它在几个网页名称上进行了测试和IP地址。 任何帮助将不胜感激,因为我觉得这可能是我忽略的一些简单错误或我不太了解的事情。谢谢!

int web_server(char *name){
    int sockfd,rec;
    struct hostent *host_info;
    //struct in_addr *address;
    struct sockaddr_in target_addr;
    unsigned char buffer[4096];


    
    if(is_ip(name)){
        target_addr.sin_addr.s_addr = inet_addr(name);
    } else if(host_info = gethostbyname(name)){
        
        if(host_info == NULL){
            fail("[ERR] looking up hostname!");
        }else{
            target_addr.sin_addr = *((struct in_addr *) host_info -> h_addr);
        }
    } else{
        fail("[ERR] getting address");
    }

    target_addr.sin_family = AF_INET;
    target_addr.sin_port = htons(80);
    memset(&(target_addr.sin_zero),8);
    
    sockfd = socket(PF_INET,SOCK_STREAM,0);
    if(sockfd == -1){
        fail("[ERR] in socket");
    }

    rec = connect(sockfd,sizeof(struct sockaddr) == -1);
    if(rec == -1)
        fail("[ERR] connecting to target server");

    send_string(sockfd,"HEAD / HTTP/1.0\r\n\r\n");

    while(recv_line(sockfd,buffer)){
        if(strncasecmp(buffer,"Server: ",7) == 0){
            printf("The web server for %s is %s\n",name,buffer+8);
        }
    }
    close(sockfd);
    printf("Server line not found\n");
    exit(1);

}
int main(){
  web_server("127.0.0.1");//doesn't work with hostnames either
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)