Network programming Can';t绑定到端口80

Network programming Can';t绑定到端口80,network-programming,Network Programming,我正在使用Windows 10和Visual Studio 2016。我无法绑定到端口80。我可以绑定到所有其他端口。打印的错误是:“绑定IP地址0.0.0.0返回错误,端口80:无错误” 这是我的密码: /* bind this socket to the server's Internet address */ if( bind(fd,(struct sockaddr *)server_addr,sizeof(struct sockaddr_in))<0 ) { printf

我正在使用Windows 10和Visual Studio 2016。我无法绑定到端口80。我可以绑定到所有其他端口。打印的错误是:“绑定IP地址0.0.0.0返回错误,端口80:无错误”

这是我的密码:

/*  bind this socket to the server's Internet address */
if( bind(fd,(struct sockaddr *)server_addr,sizeof(struct sockaddr_in))<0 )
{
    printf("Bind of IP address %s returned an error, port %d: %s\n",
        inet_ntoa(server_addr->sin_addr), ntohs(server_addr->sin_port),
        strerror(errno));
    //close(fd);
    return -1;
}
/*将此套接字绑定到服务器的Internet地址*/
如果(bind(fd,(struct sockaddr*)服务器地址,sizeof(struct sockaddr\u in))sin\u地址,ntohs(服务器地址->sin\u端口),
斯特雷罗(埃尔诺));
//关闭(fd);
返回-1;
}

好的,您可以使用netstat查看是否有其他人在收听,请参阅本文:

找到哪个进程已经在使用端口80并停止它

您还需要是管理员,或者显式地授予正在运行的用户访问权限,就像绑定端口<1024一样。看这里


好的,您可以使用netstat查看是否有其他人在收听,请参阅本文:

找到哪个进程已经在使用端口80并停止它

您还需要是管理员,或者显式地授予正在运行的用户访问权限,就像绑定端口<1024一样。看这里


使用“netstat-o-q-a-n”。然后使用任务管理器并查看详细信息选项卡。单击可将PID排序为从低到高。找到PID并注意打开端口的程序的名称。在我的例子中,系统正在侦听端口80,由于您无法终止系统,所以基本上无法绑定到端口80。

使用“netstat-o-q-a-n”。然后使用任务管理器并查看详细信息选项卡。单击可将PID排序为从低到高。找到PID并注意打开端口的程序的名称。在我的例子中,系统正在侦听端口80,因为您无法终止系统,所以您基本上无法绑定到端口80。

请解释为什么您在这里给了我-1。在调用任何其他系统调用之前,您需要调用
strerror()
。你没有在这里报告错误更正错误。。。调用strerror()将错误号转换为字符串。如果是在系统调用之前完成的,那么它将转换错误的错误号。@Eddy请阅读我写的内容。我说“在任何其他系统调用之前”。从显示的文本中可以明显看出,
errno
在这里调用
strerror()
之前已经损坏,可能是由
inet\u ntoa()
造成的。
bind()
返回-1后,您不会得到“无错误”。很抱歉,您是正确的。这里发生的是,这段代码首先调用bind,然后调用inet_ntoa,然后调用ntohs,最后调用strerror。由于错误是由于绑定引起的,因此需要在inet\u ntoa和ntohs之前调用strerror,因为它们会将错误重置为0。请解释为什么在这里给我一个-1。在调用任何其他系统调用之前,需要调用
strerror()
。你没有在这里报告错误更正错误。。。调用strerror()将错误号转换为字符串。如果是在系统调用之前完成的,那么它将转换错误的错误号。@Eddy请阅读我写的内容。我说“在任何其他系统调用之前”。从显示的文本中可以明显看出,
errno
在这里调用
strerror()
之前已经损坏,可能是由
inet\u ntoa()
造成的。
bind()
返回-1后,您不会得到“无错误”。很抱歉,您是正确的。这里发生的是,这段代码首先调用bind,然后调用inet_ntoa,然后调用ntohs,最后调用strerror。由于错误是由于绑定引起的,因此需要在inet_ntoa和ntohs之前调用strerror,因为它们会将错误重置为0。