问题描述
我正在探索用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 (将#修改为@)