首頁 >php教程 >PHP开发 >用Perl語言進行Socket編程

用Perl語言進行Socket編程

黄舟
黄舟原創
2016-12-16 13:54:461162瀏覽

網路程式設計是一門神祕且複雜的藝術,當然也十分有趣。 Perl語言提供了豐富的TCP/ip網路函數,所有這些函數都
直接來自C語言的socket函式庫函數.
由於Perl語言和C語言的socket函式庫函數在型式和使用方法上都是一樣的,因此會使用Perl語言進行Socket編程,當
然也就會使用C語言進行Socket編程.
下面是Perl語言中有關的socket庫函數列表:
函數原型使用說明
accept(NEWSOCKET,GENERICSOCKET)接受請求的socket連接.如果成功,則回傳壓縮形式的網路位址;否則回傳FALSE.
範例:
if(!$Connect=accept(NEW,HANDLE))
{
die"Connectionfailed:$!
";
}
bind (SOCKET,NAME)建立NAME與SOCKET的綁定,其中NAME應該是對應socket正確類型的壓縮地址.
如果成功,則返回真;否則返回假.
在使用socket進行網絡編程時,這一函數十分重要,因為它建立了socket句柄與網路上某個位址的關聯.
範例:
bind(SH,$SocketAddress);
connect(SOCKET,NAME)試圖與已經呼叫了accept()函數並等待建立連線的另外一個進程進行對話.
如果成功,則回傳真;否則回傳假.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);

驗證郵箱密碼的程式的原碼
下面的程式碼在兩種作業系統下對263.net和pop.netease. com兩個POP3伺服器嚴格測試,證明是成功的.
第一種:
作業系統:Windows98中文版
WWW伺服器:Apache1.3.9forWin
Perl解釋器:ActiveStateToolCorp的PerlforWin32,version5.005_03buforMSWin32,version5.005_03第二種:
作業系統:RedHatlinux6.1
WWW伺服器:Apache1.3.6forLinux
Perl解釋器:version5.005_03builtfori386-linux

#!/usr/bin/perll#Atest.a. //spot.126.com
usestrict;
useSocket;

my$pop3server="263.net";
my$port=110;

$|=1;
寶"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,$alia $port)=getservbyname($port,"tcp")
unless$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$thataddr);

my$mysocket=socket(S$thataddr); $AF_INET,$SOCK_STREAM,$proto);
if($mysocket)
{
}
else
{
print"不能開啟socket:$!";
exit(0);mmy}
}
(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
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);
);
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);
}
🎜";🎜exit(0);🎜}🎜🎜 ";🎜$BUFFER.=chr(13);
$BUFFER.=chr(10);


my$SENVAL=send(S,$BUFFER,0);
if($SENVAL)
{
}

print"傳送錯誤:$!";
exit(0);
}

$BUF="";
my$SenderIP=recv(S,$BUF,196,0);
if($SenderIP)
{
}
else
{
print"接收錯誤:$!";
else
{
print"接收錯誤:$!";
exit(0);
}

if(substr($BUF,0,3)eq" OK")
{
}
{
print"密碼錯誤!";
exit(0);
}

print密碼是正確的!

 以上就是用Perl語言進行Socket編程的內容,更多相關文章請關注PHP中文網(www .php.cn)! 


🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn