Netzwerkprogrammierung ist eine mysteriöse und komplexe Kunst, aber auch sehr interessant. Die Perl-Sprache bietet eine Fülle von TCP/IP-Netzwerkfunktionen, die alle
direkt von den Socket-Bibliotheksfunktionen der C-Sprache abgeleitet sind
Da die Socket-Bibliotheksfunktionen der Perl-Sprache und der C-Sprache ähnlich sind Im Stil und in der Verwendung werde ich die Perl-Sprache für die Socket-Programmierung verwenden, und natürlich
Ich werde auch die C-Sprache für die Socket-Programmierung verwenden
Das Folgende ist eine Liste verwandter Socket-Bibliotheksfunktionen in der Perl-Sprache:
Anleitung zur Verwendung von Funktionsprototypen
accept(NEWSOCKET,GENERICSOCKET) akzeptiert die angeforderte Socket-Verbindung. Bei Erfolg wird die Netzwerkadresse in komprimierter Form zurückgegeben.
Beispiel:
if(!$ Connect=accept(NEW,HANDLE))
{
die "Connectionfailed:$!
";
}
bind(SOCKET,NAME) stellt die Bindung zwischen NAME und SOCKET her, wobei NAME sollte die komprimierte Adresse sein, die dem richtigen Socket-Typ entspricht.
Bei Erfolg wird true zurückgegeben, andernfalls wird false zurückgegeben.
Bei Verwendung von Socket für die Netzwerkprogrammierung ist diese Funktion sehr wichtig, da sie die Zuordnung zwischen dem Socket-Handle herstellt und eine Adresse im Netzwerk.
Beispiel:
bind(SH,$SocketAddress);
connect(SOCKET,NAME) versucht, mit einem anderen Prozess zu kommunizieren, der die Funktion „accept()“ aufgerufen hat und darauf wartet Stellen Sie eine Verbindung her.
Bei Erfolg wird „True“ zurückgegeben; andernfalls sollte „NAME“ die komprimierte Adresse sein, die dem richtigen Typ des SOCKET-Handles entspricht.
connect(SOCK,$address)||die „ Can'tconnectwithremotehost:$!
";
gethostbyaddr(ADDRESS,TYPE) wandelt die komprimierte Netzwerkadresse in einen Namen und eine Adresse um, die für Menschen leichter lesbar und verständlich sind.
Wenn nur die IP-Adresse des Wenn der Host bekannt ist, können Sie mit dieser Funktion den Hostnamen und andere Netzwerkinformationen abfragen. Es wird eine Liste mit den folgenden Informationen zurückgegeben:
($name,$alias,$addrtype,$length,$address)
Dabei ist $name der Hostname, der der IP-Adresse entspricht, und $alias ist der andere Name, der $name Alias entspricht, $addrtype ist der Typ der Netzwerkadresse, $length ist die Länge der
-Adresse und $address ist eine Liste komprimierter IP-Adressen.
Beispiel:
$PackedAddress=pack("C4",$ IPAddr);
($name,$alias,$addrtype,$length,$address)
=gethostbyaddr($PackedAddress,2);
gethostbyname(NAME) ähnelt der Funktion gethostbyaddr(), aber hier wird der Hostname als Parameter verwendet.
Beispiel:
$Host="stuff.com";
($name,$alias,$addrtype,$length,$adresse)
=gethostbyname($Host);
@IP =unpack("C4",$address[0]);
$HostIP=join(".",@IP);
Der Originalcode des Programms zur Überprüfung des E-Mail-Passworts
Der folgende Code wurde auf den beiden POP3-Servern 263.net und pop.netease.com unter zwei Betriebssystemen streng getestet und erwies sich als erfolgreich.
Erste Art:
Betriebssystem: Windows98 chinesische Version
WWW-Server : Apache1.3.9forWin
Perl-Interpreter: ActiveStateToolCorp's PerlforWin32, version5.005_03builtforMSWin32-x86-object
Zweiter Typ:
Betriebssystem: RedHatlinux6.1
WWW-Server: Apache1.3.6forLinux
Perl Interpreter: 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")
es sei denn $ 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 „Cannot open socket:$!“;
exit(0) ;
}
my$mybind=bind(S,$this);
if($mybind )
{
}
else
{
print"Bindung nicht möglich! :$!";
exit(0);
}
my$myconnect=connect(S,$that);
if($myconnect)
{
}
else
{
print"Verbindungsfehler:$!";
exit(0);
}
my$BUF="";
my $SenderIP=recv(S,$BUF,596,0);
if($SenderIP)
{
}
else
{
print „Empfangsfehler: $!“ ;
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print"POP3-Serverfehler!
";
exit(0);
}
my$BUFFER="USERzhangsan";
$BUFFER. =chr(13);
$BUFFER.=chr(10);
my$SENVAL=send(S,$BUFFER,0);
if($SENVAL)
{
}
else
{
print"Sendefehler: $!";
exit(0);
}
my$BUF="";
my$SenderIP=recv(S,$BUF,4096,0);
if($SenderIP)
{
}
else
{
print"Empfangsfehler: $!";
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print"Kein solches Konto!
";
exit(0);
}
$BUFFER="PASS12345678";
$BUFFER.=chr(13);
$BUFFER.=chr(10);
my$SENVAL=send(S,$BUFFER,0);
if($ SENVAL)
{
}
else
{
print „Sendefehler: $!“;
exit(0);
}
$BUF ="";
my$SenderIP=recv(S,$BUF,196,0);
if($SenderIP)
{
}
else
{
print „Empfangsfehler: $!“;
exit(0);
}
if(substr($BUF,0,3)eq" OK")
{
}
else
{
print „Falsches Passwort!“;
exit(0);
}
print Das Passwort ist korrekt!
Das Obige ist der Inhalt der Socket-Programmierung mit der Perl-Sprache. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!