Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
为什么我的Perl服务器无法绑定到端口80?_Perl_Sockets_Netstat - Fatal编程技术网

为什么我的Perl服务器无法绑定到端口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

我复制了下面的脚本并运行它,让它在端口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_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
列出侦听套接字。