gpt4 book ai didi

perl - Perl套接字的工作

转载 作者:行者123 更新时间:2023-12-03 11:58:11 24 4
gpt4 key购买 nike

我是Perl套接字编程的初学者。到目前为止,服务器发送一个字符串,而客户端用我程序中的另一个字符串进行响应。稍后,如果服务器发送另一个字符串,则客户端将无法接收它。要多次在服务器和客户端之间传输数据,我应该包括任何功能吗?

服务器:

#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;

my $socket;
my $clientsocket;
my $serverdata;
my $clientdata;

$socket = new IO::Socket::INET (
LocalHost => '127.0.0.1',
LocalPort => 2500,
Proto => 'tcp',
Listen => 1,
Reuse => 1
) or die "Oops: $! \n";

print "Waiting for the Client.\n";
$clientsocket = $socket->accept();
print "Connected from : ", $clientsocket->peerhost();
print ", Port : ", $clientsocket->peerport(), "\n";

# Write some data to the client
$serverdata = "This is the Server speaking \n";
print $clientsocket "$serverdata \n";

# read the data from the client
$clientdata = <$clientsocket>;
print "$clientdata";
$serverdata = "Server Again writing \n";
print $clientsocket "$serverdata";

$socket->close();

客户:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
use Tk;

my $socket;
my $serverdata;
$socket = new IO::Socket::INET (
PeerHost => '127.0.0.1',
PeerPort => '2500',
Proto => 'tcp',
) or die "$!\n";

print "Connected to the Server.\n";

# read the message sent by server.
$serverdata = <$socket>;
print "Message from Server : $serverdata \n";

# Send some message to server.
my $name = "Client here!";
print $socket "$name";

# Read message sent by server.
$serverdata = <$socket>;
print "$serverdata";

$socket->close();

没有在客户端第二次打印$ serverdata。

最佳答案

您的服务器开始在某个端口上监听。它一直等到客户端连接为止,accept表示该连接。它通过客户端连接读取和写入一些数据。接着?然后,它仅关闭套接字并退出程序。

那不是您想要的:您希望服务器开始等待下一个连接。这意味着某种循环:每次客户端连接时,我们都会进行通信:

while (my $client = $socket->accept) {
# do something with the $client
}

我建议您通读 perldoc perlipc 的相关部分,但请记住,它使用了过时的最佳实践,因此请勿直接复制任何内容。

关于perl - Perl套接字的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22731723/

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