Socket
use Socket; my $port = 50001; my $servaddr = sockaddr_in($port, INADDR_ANY); my $proto = getprotobyname('udp'); socket(my $sock, AF_INET, SOCK_DGRAM, $proto) or die $!; bind($sock, $servaddr) or die $!; my $max_line = 4096; while(1){ my $cliaddr = recv($sock, my $message, $max_line, 0) or die $!; (my $mesg = $message) =~ s/\r?\n//; send($sock, qq{You said:"$mesg"\n}, 0, $cliaddr) or die $!; }
参照: W. Richard Stevens,1998,UNIX NETWORK PROGRAMMING Volume1 SecondEdition,Prentice Hall,W・リチャード・スティーブンス 篠田 陽一(訳),1999,UNIXネットワークプログラミング第2版 Vol.1,ピアソン・エデュケーション,p.208
Net::Server
package _MyServer; use parent 'Net::Server'; sub process_request { my $self = shift; my $prop = $self->{server}; (my $message = $prop->{udp_data}) =~ s/\r?\n//; $prop->{client}->send(qq{You said:"$message"\n}, 0); } package main; _MyServer->new->run(port => ":50001/udp");
参照: http://cpansearch.perl.org/src/RHANDOM/Net-Server-2.007/examples/udp_server.pl
IO::Socket::Inet
use IO::Socket::INET; my $server = IO::Socket::INET->new( LocalPort => 50001, Proto => 'udp', ) or die $!; my $max_line = 4096; while($server->recv(my $message, $max_line, 0)){ (my $mesg = $message) =~ s/\r?\n//; $server->send(qq{You said:"$mesg"\n}) or die $!; }
参照: Tom Christiansen and Nathan Torkington,1998,Perl Cookbook,O'Reilly,トム・クリスチャンセン ネイザン・トーキントン 田和 勝(訳),2001,Perlクックブック,オライリージャパン,p.629
AnyEvent::Handle::UDP
use AnyEvent; use AnyEvent::Handle::UDP; my $udp_server = AnyEvent::Handle::UDP->new( bind => ['0.0.0.0', 50001], on_recv => sub{ my ($message, $ae_handle, $cliaddr) = @_; (my $mesg = $message) =~ s/\r?\n//; $ae_handle->push_send(qq{You said:"$mesg"\n}, $cliaddr); } ); my $condvar = AnyEvent->condvar; $condvar->recv;
参照: http://cpansearch.perl.org/src/LEONT/AnyEvent-Handle-UDP-0.043/examples/anyevent-udp-server.pl
0 件のコメント:
コメントを投稿