gpt4 book ai didi

perl - 为什么按 'enter' 时我的 perl 服务器停止工作?

转载 作者:行者123 更新时间:2023-12-04 06:53:25 25 4
gpt4 key购买 nike

我在 perl 中创建了一个服务器,用于向客户端发送消息或命令。我可以很好地发送命令,但是当我在我创建的服务器上提示我输入命令时,如果我按“输入”,服务器就会搞砸。为什么会这样?

这是我的代码的一部分:

打印 "\n从端口 $peer_port 上的 IP 地址 $peer_address 收到连接";
$closed_message = "\n\t客户端 session 终止...";

 while (1)
{

print "\nCommand: ";

$send_data = <STDIN>;
chop($send_data);

if ($send_data eq 'e' or $send_data eq 'E' or $send_data eq ' E' or $send_data eq ' E ' or $send_data eq 'E ' or $send_data eq ' e' or $send_data eq ' e ' or $send_data eq 'e')
{

$client_socket->send ($send_data);
close $client_socket;
print "$closed_message\n";
&options;
}

else
{
$client_socket->send($send_data);
}

$client_socket->recv($recieved_data,8000);
print "\nRecieved: $recieved_data";
}

}

最佳答案

您的服务器阻塞了对 $client_socket->recv(...) 的调用-- 服务器和客户端陷入僵局,各自等待对方说话。

尝试将此行放在您的 chop() 之后:

next unless length $send_data;  # restart the loop if no command submitted

现在,重新编写您的示例,这是我推测正在发生的事情:
$send_data = <STDIN>;            # $send_data := "\n"
# you just input a blank line with [ENTER]

chop($send_data); # $send_data := ""

$client_socket->send($send_data) # you send a zero-length buffer
# On my system, this does generate a syscall for
# the sender, but no data is transmitted

$client_socket->recv($buf, 8192) # Hang indefinitely. Your client application
# received no command, and so it has sent no
# response.

这只是猜测。如 @DVK评论,我们实际上并不知道您的症状,从您的描述中很难猜测发生了什么。然而,它确实类似于我过去被咬过的一个问题。

关于perl - 为什么按 'enter' 时我的 perl 服务器停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2805992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com