ネットワーク プログラミングは神秘的で複雑な芸術ですが、もちろん非常に興味深いものでもあります。 Perl 言語は豊富な TCP/ip ネットワーク関数を提供しますが、それらはすべて C 言語のソケット ライブラリ関数から直接派生したものです。Perl 言語と C 言語のソケット ライブラリ関数は形式と使用法が同じであるため、そのため、ソケット プログラミングには Perl 言語を使用できます。もちろん、ソケット プログラミングには C 言語も使用できます。
以下は、Perl 言語の関連ソケット ライブラリ関数のリストです。
関数プロトタイプの使用手順
accept ( NEWSOCKET、GENERICSOCKET) を使用して、要求されたソケット接続を受け入れます。成功した場合は、圧縮形式でネットワーク アドレスを返します。 $!
";
}
bind (SOCKET, NAME) は、NAME と SOCKET の間のバインディングを確立します。NAME は、ソケットの正しいタイプに対応する圧縮アドレスである必要があります。
成功した場合は true を返し、それ以外の場合は false を返します。ネットワーク プログラミングにソケットを使用する場合、この関数は非常に便利です。重要なのは、ソケット ハンドルとネットワーク上のアドレス間の関連付けを確立するためです。
例:
bind(SH,$SocketAddress);
connect(SOCKET,NAME) は次のことを試みます。 accept() 関数を呼び出し、接続の確立を待機している accept() 関数と接続します。
成功した場合は true を返し、そうでない場合は false を返します。NAME は正しいアドレスに対応する必要があります。 SOCKET ハンドルのタイプ
例:
connect(SOCK,$address)||die"Can'tconnectwithremotehost:$!
";
gethostbyaddr(ADDRESS,TYPE) は、圧縮されたネットワーク アドレスを人間にとってわかりやすい名前とアドレスに変換します
ホストの IP アドレスのみがわかっている場合、この関数を使用してホスト名とその他のネットワーク情報をクエリできます。
($name,$alias,$) addrtype,$length,$address)
ここで、$name は IP アドレスに対応するホスト名、$alias は $name に対応する他のエイリアス、$addrtype はネットワーク アドレスのタイプ、$length はアドレスの長さです、$address は圧縮された IP アドレスのリストです。
例:
$PackedAddress=pack("C4",$IPAddr);
($name, $alias,$addrtype,$length,$address)
=gethostbyaddr( $PackedAddress,2);
gethostbyname(NAME) は上記の gethostbyaddr() 関数に似ていますが、ここではホスト名がパラメータとして使用されます。返される情報の形式は完全に同じです。
例:
$Host="stuff. com";
($name,$alias,$addrtype,$length,$address)
=gethostbyname($Host);
@IP=unpack("C4", $address[0]);
$HostIP=join (".",@IP);
電子メール パスワードを検証するプログラムの元のコード
次のコードは、com の 2 つの POP3 サーバー上の 263.net と Pop.netease で動作することが厳密にテストされ、証明されました。
最初のタイプ:
オペレーティング システム: Windows98 中国語バージョン
WWW サーバー: Apache1.3.9forWin
Perl インタプリタ: ActiveStateToolCorp の PerlforWin32、バージョン 5.005_03builtforMSWin32-x86-object
2 番目のタイプ:
オペレーティング システム: RedHatlinux6.1
W WWサーバー: Apache1.3.6forLinux
Perl インタプリタ: version5.005_03builtfori386-linux
#!/usr/bin/perl
#test.pl
#Authorhomepage: http://spot.126.com
usestrict;
useSocket;
my$pop3server="263.net";
my$port=110;
$|=1;
PRint"Content-type:text/html
";
print"POP3
";
print"
" ;
my($a,$name,$aliases,$proto,$type,$len,$thataddr,$thisaddr,$i);
my$AF_INET=2;
my$SOCK_STREAM=1;
my $sockaddr="Sna4x8";
($name,$aliases,$proto)=getprotobyname("tcp");
($name,$aliases, $port)=getservbyname($port,"tcp")
$port=~/^d $/;;
($name,$aliases,$type,$len,$thataddr)=gethostbyname($pop3server);
my$this=pack($sockaddr,$AF_INET,12345) ,$thisaddr);
my$that=pack($sockaddr,$AF_INET,$port,$thataddr);
my$mysocket=socket(S, $AF_INET,$SOCK_STREAM,$proto);
if($mysocket )
{
}
else
{
print "ソケットを開けません:$!";
exit(0);
}
my$mybind=bind (S,$this);
if($mybind)
{
}
else
{
print「バインドできません! :$!";
exit(0);
}
my$myconnect=connect(S,$that);
if($myconnect)
{
}
else
{
print"接続エラー:$!" ;
exit(0);
}
my$BUF="";
my$SenderIP=recv(S,$BUF,596,0);
if($SenderIP)
{
}
else
{
print "受信エラー: $!";
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print"POP3 サーバー エラー!
";
exit(0);
}
my$BUFFER="USERzhangsan";
$BUFFER.=chr(13);
$BUFFER.=chr(10);
my$SENVAL=send( S,$BUFFER,0);
if($SENVAL)
{
}
else
{
print "送信エラー: $!";
exit(0);
}
my$BUF="";
my$SenderIP=recv(S,$BUF,4096,0);
if($SenderIP)
{
}
else
{
print "受信エラー: $!";
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print"そのようなアカウントはありません!
";
exit(0);
}
$BUFFER="PASS12345678 ";
$BUFFER.=chr(13);
$BUFFER.=chr(10);
my$SENVAL=send(S,$BUFFER,0);
if($SENVAL)
{
}
else
{
print"送信エラー: $!";
exit(0);
}
$BUF="";
my$SenderIP=recv(S,$BUF,196,0);
if($SenderIP)
{
}
else
{
print "受信エラー: $!";
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print "パスワードが間違っています!";
exit(0);
}
print パスワードは正しいです!
上記は Perl 言語を使用したソケットプログラミングの内容です。その他の関連記事については、こちらをご覧ください。 PHP 中国語 Web サイト (www .php.cn)!