gpt4 book ai didi

perl - 在 Perl 聊天服务器中同时传输数据?

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

我正在用 Perl 编写一个聊天服务器,我可以在主机(服务器)和客户端之间传输消息,但我不能同时发送和接收数据。

那么我该如何实现服务器,以便它可以同时发送和接收数据,而不是等待其中一个完成继续前进?

这就是我到目前为止所写的。

服务器

use IO::Socket::INET;
use Socket;
# auto-flush on socket
$| = 1;
$data;

my $socket = new IO::Socket::INET (
LocalHost => 'localhost',
LocalPort => '4200',
Proto => 'tcp',
Listen => 5,
Reuse => 1
);
die "cannot create socket $!\n" unless $socket;

print "server waiting for client connection on port 4200\n";

while(true)
{

my $client_socket = $socket->accept();
my $client_address = $client_socket->peerhost();
my $client_name=gethostbyaddr($client_address, AF_INET );
my $client_port = $client_socket->peerport();
print "Connection recieved from $client_address\n";
while($client_socket != null)
{
$client_socket->recv($data, 1024);
print "$client_name: $data\n";
$msg=<>;
$client_socket->send($msg);
}
}
$socket->close();

客户端

use IO::Socket::INET;
$| = 1; # auto-flush on socket
my $socket = new IO::Socket::INET (
PeerHost => '127.0.0.1',
PeerPort => '4200',
Proto => 'tcp',
); # create a connecting socket
die "cannot connect to the server $!\n" unless $socket;
print "connected to the server\n";

my $recieved;
while(true)
{
$input=<>;
$socket->send($input);
$socket->recv($msg,1024);
print ">".$msg;
}
$socket->close();

最佳答案

你的程序(脚本)都是单线程代码。如果你想做一个全双工的能力,你将需要做 - 至少 - 每个程序两个线程。一个用于接收数据,另一个用于发送。

通常使用三个线程:View、Send和Receive

首先显示接收队列的数据,需要发送时发送到发送队列

Send 连接或保持与远程服务器的连接并发送数据,只期望对发送的数据进行确认。不主动接收

Receive 连接或保持与远程服务器的连接,并接收在那里等待的数据,它不发送任何东西,只是在有数据时循环并接收它,并在有数据时等待来自发送服务器的“标志”数据待定。

关于perl - 在 Perl 聊天服务器中同时传输数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977623/

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