Perl에 채팅 서버를 쓰고 있는데 호스트 (서버)와 클라이언트간에 메시지를 전송할 수 있지만 동시에 데이터를 보내고받을 수는 없습니다.동시 데이터 전송 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();