为什么我的Perl服务器无法绑定到端口80?
我复制了下面的脚本并运行它,让它在端口80上侦听。但是为什么我的Perl服务器无法绑定到端口80?,perl,sockets,netstat,Perl,Sockets,Netstat,我复制了下面的脚本并运行它,让它在端口80上侦听。但是netstat不显示端口80。为什么netstat没有播下它,或者Perl脚本不正确 #!/usr/bin/perl -w use Socket; use IO::Handle; $port=80; $host='localhost'; $packhost=inet_aton($host); $address=sockaddr_in($port,$packhost); socket(SERVER,AF_INET,SOCK_STR
netstat
不显示端口80。为什么netstat
没有播下它,或者Perl脚本不正确
#!/usr/bin/perl -w
use Socket;
use IO::Handle;
$port=80;
$host='localhost';
$packhost=inet_aton($host);
$address=sockaddr_in($port,$packhost);
socket(SERVER,AF_INET,SOCK_STREAM,getprotobyname('tcp'));
bind(SERVER,$address);
listen(SERVER,10);
while( 1 ) {
next unless (accept(CLIENT,SERVER));
CLIENT->autoflush(1);
$msg_out="WHAT DO YOU WANT?\n";
send(CLIENT,$msg_out,0);
close CLIENT;
}
close SERVER;
exit 1;
你在哪个站台?如何调用
netstat
在Windows XP上,在以管理员权限运行脚本后,netstat-a给了我:
TCP aardvarkvi:http aardvarkvi:0 LISTENING
TCP aardvarkvi:http aardvarkvi:0正在侦听
绑定到1024以下的端口需要在*nix
系统上具有root权限。由于您不检查各种调用的返回值(或者说,您似乎盲目复制的代码不检查),因此您不知道它们是否失败
通常,您不必使用Socket.pm。坚持并避免盲目复制代码而不知道它的作用
您可能还想调查一下。您在哪个平台上?如何调用
netstat
在Windows XP上,在以管理员权限运行脚本后,netstat-a给了我:
TCP aardvarkvi:http aardvarkvi:0 LISTENING
TCP aardvarkvi:http aardvarkvi:0正在侦听
绑定到1024以下的端口需要在*nix
系统上具有root权限。由于您不检查各种调用的返回值(或者说,您似乎盲目复制的代码不检查),因此您不知道它们是否失败
通常,您不必使用Socket.pm。坚持并避免盲目复制代码而不知道它的作用
您可能还想查看。可能是
netstat
正在用/etc/services
中的名称替换数字端口号。例如:
~, 503> netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:svn *:* LISTEN
您还可以告诉netstat
显示数字地址,而不是执行主机名或服务查找(还有另一个选项,您可以仅限制端口号;执行man-netstat):
netstat-an | grep LISTEN | grep tcp很可能是
netstat
将数字端口号替换为/etc/services
中的名称。例如:
~, 503> netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:svn *:* LISTEN
您还可以告诉netstat
显示数字地址,而不是执行主机名或服务查找(还有另一个选项,您可以仅限制端口号;执行man-netstat):
netstat-an | grep LISTEN | grep tcp对不起,是我的错,当我运行netstat时,我没有把选项-a放进去。当使用netstat-a时,它会显示该端口。对不起,我的错,当我运行netstat时,我没有输入选项-a。当使用netstat-a时,它会显示该端口。您能ping端口80吗?尝试运行“netstat-an”…端口80是特权端口。您是否以root用户身份运行脚本?如果无法绑定端口,则bind的返回值将为false。忽略错误检查确实节省了大量时间。哦,等等,不。讽刺是一种有效的沟通工具。哦,等等,不:)你能ping端口80吗?尝试运行“netstat-an”…端口80是特权端口。您是否以root用户身份运行脚本?如果无法绑定端口,则bind的返回值将为false。忽略错误检查确实节省了大量时间。哦,等等,不。讽刺是一种有效的沟通工具。哦,等等,不:)您到HTTP::Daemon的链接断开了(您只放了1':',而不是2)。正确的URL是:@Weegee和@ysth:谢谢。哇,你实际上是在用“指示用户输入的文本”,还是仅仅因为它的视觉效果实际上,我用它来“指示用户输入的文本”。如此引人注目的事实是喜忧参半。实际上,我会发现它更令人愉快,因为斜角效果更少(或者不管它叫什么;-),您到HTTP::Daemon的链接断开了(您只放了1’:’,而不是2)。正确的URL是:@Weegee和@ysth:谢谢。哇,你实际上是在用“指示用户输入的文本”,还是仅仅因为它的视觉效果实际上,我用它来“指示用户输入的文本”。如此引人注目的事实是喜忧参半。实际上,我会发现它更令人愉快,因为它的斜角效果(或者不管它叫什么;-)在默认情况下,
netstat
只列出连接的套接字-a
列出所有套接字,Linux的netstat
也理解-l
列出侦听套接字。默认情况下,netstat
只列出连接的套接字-a
列出所有套接字,Linux的netstat
也理解-l
列出侦听套接字。