gpt4 book ai didi

perl - 多客户端全双工 Perl 套接字

转载 作者:行者123 更新时间:2023-12-03 12:00:28 26 4
gpt4 key购买 nike

我用 perl 写了一个多客户端套接字脚本。我能够使用 fork 与多个客户端建立连接。但是在建立新连接后,我只能发送和接收一次。我无法在客户端套接字上进一步读取或写入,以进行扩展对话。
目标:
客户端连接后,它将其 ID 发送到服务器。收到 ID 后,服务器将使用其 ID 获取客户端的文件,并将其逐页发送给客户端。由于客户端只能接受有限字节的数据,我们不能在单个套接字发送中发送它。所以我需要发送一个 1024 字节的数据。客户必须确认,我必须再次发送下一页。像这样,我必须为每个客户端同时进行长时间的套接字连接,直到他们都收到整个文件。
代码示例:

use strict;
use warnings;
use IO::Socket::INET;

# flush after every write
$| = 1;
my $data;
my ( $server_socket, $client_socket );
my ( $peer_address, $peer_port );

$server_socket = new IO::Socket::INET(
LocalHost => '192.168.0.7',
LocalPort => '1008',
Proto => 'tcp',
Listen => 5,
Reuse => 1
) or die "ERROR in Socket Creation : $!\n";

print "SERVER Waiting for client connection on port 1008";
#$SIG{CHLD}=sub {wait()}; # Signal waiting for the Child process created
while ( $client_socket = $server_socket->accept() ) {
my $pid = fork(); # Creating child as soon client creates a connection
if ( $pid == 0 ) # Checking the child process
{
my $peer_address = $client_socket->peerhost();
my $peer_port = $client_socket->peerport();
print "Accepted New Client Connection From : $peer_address, $peer_port\n";
$client_socket->recv( $data, 1024 );
print $data;
$client_socket->send("FileLine1");

#Get the acknowledgement
$client_socket->recv( $data, 1024 );

$client_socket->send("FileLine2");

#Get the end acknowledgement
$client_socket->recv( $data, 1024 );
exit(0); # Exiting child process
}
}
我的问题是:我们可以依靠 perl 来做这件事吗?或者我们是否需要使用其他平台,如 Java 等。

最佳答案

我强烈建议您使用 Net::Server CPAN 模块来构建您的服务器。
Net::Server尝试成为通用服务器。它包括作为 inetd 进程、单连接服务器、 fork 服务器、维护恒定数量的预 fork 子节点的预 fork 服务器或作为托管预 fork 服务器运行的能力,该服务器根据服务器负载维护子节点数量.

关于perl - 多客户端全双工 Perl 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25968736/

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