基于udp的socket通讯程序!

基于udp的socket通讯程序!

在验证基于tcp和udp实现网络通讯时传输消息的异同状况时,出现了以下困难,不知哪位遇到过,能给以指点!

1、以前用“tcp”协议边的程序,可以正常的互相通讯,收发消息,
但是在把‘tcp’换成‘udp’之后,程序就没办法再通讯了!

不知这其中有什么特别的原因,请大家说说!


2、我这里找了一个基于‘udp’的程序:
#!/usr/bin/perl
#server端

use strict;
use IO::Socket;
use constant MY_ECHO_PORT=>2007;
use constant MAX_MSG_LEN=>5000;

my $port=shift || MY_ECHO_PORT;

$SIG{'INT'}=sub { exit 0};
my $sock=IO::Socket::INET->new(Proto=>'udp',
                  LocalPort=>$port) or die $@;
   my($msg_in,$msg_out);
   warn "servicing incoming requests...\n";
   while(1){
   next unless $sock->recv($msg_in,MAX_MSG_LEN);
   my $peerhost=gethostbyaddr($sock->peeraddr,AF_INET)||$sock->peerhost;
   my $peerport=$sock->peerport;
   my $length=length($msg_in);
   warn"Received $length bytes from[$peerhost,$peerport]\n";

   $msg_out=reverse $msg_in;
   $sock->send($msg_out)or die "send()!\n";
   }
   $sock->close;

#!/usr/bin/perl
#client端

use strict;
use IO::Socket;
use constant MAX_MSG_LEN=>5000;
my $msg_in;

my $host=shift || 'localhost';
my $port=shift ||'echo(7)';

my $sock=IO::Socket::INET->new(Proto=>'udp',
                              PeerAddr=>"$hostport"
   or die $@;

   while(<>{
   chomp;
   $sock->send($_)       or die "send() failed!";
   $sock->recv($msg_in,MAX_MSG_LEN) or die "recv() failed!";
   print"$msg_in\n";
   }
   $sock->close;

server端可正常打开建立socket,当client端输入消息发送时,会出现

“recv<>  failed:unknown error……”
请使用code标签