Heim > php教程 > PHP开发 > Socket-Programmierung mit Perl-Sprache

Socket-Programmierung mit Perl-Sprache

黄舟
Freigeben: 2016-12-16 13:54:46
Original
1161 Leute haben es durchsucht

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)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage