欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Perl IO::Socket簡(jiǎn)介

如果你是windows請通過(guò)ppm安裝IO::Socket包,如果你是linux系統,請通過(guò)cpanm Module::Name來(lái)安裝IO::Socket包,然后在程序中添加use IO::Socket;
IO::Socket下又有兩個(gè)子類(lèi)IO::Socket::INET與IO::Socket::UNIX,我們現在使用IO::Socket::INET。
作為一個(gè)簡(jiǎn)單的客戶(hù)端,它的步驟只需要先調用new方法,然后立刻就可以進(jìn)行基本I/O操作了,最后只需調用close方法結束會(huì )話(huà),那么整個(gè)SOCKET會(huì )話(huà)就算完成了。
new()方法:
SOCKET對象變量=IO::Socket::INET->new(SOCKET變量值);
實(shí)例:

  1. $sock=IO::Socket::INET->new('192.168.1.2:23');

講解:
所有的PERL對象編程都把對象'形象化’為某個(gè)變量,這里的SOCKET句柄對象也不例外,調用此方法的返回值便為SOCKET對象變量了。這里使用參數為簡(jiǎn)單參數模式,在雙引號或但引號內的socket地址結構為'主機IP或域名:端口號或服務(wù)名稱(chēng)',也可以是'主機IP或域名:服務(wù)名稱(chēng)(端口號)'。除了最簡(jiǎn)單的單參數調用外,new方法還有很多參數可以選擇性調用的,下面就對這些參數作出一個(gè)簡(jiǎn)單的概括吧:

  1. 參數              描述                          值類(lèi)型
  2.  
  3. PeerAddr          遠程主機的地址                主機地址[:端口或服務(wù)]
  4. PeerHost          與PeerAddr相同
  5. PeerPort          遠程端口或服務(wù)                端口或服務(wù)
  6. LocalAddr         本地地址                      主機地址[:端口或服務(wù)]
  7. LocalHost         與LocalAddr相同
  8. LocalPort         本地端口                      端口或服務(wù)
  9. Proto             所使用的協(xié)議                  協(xié)議名或協(xié)議號
  10. Type              套接字類(lèi)型                    SOCK_STREAM/SOCK_DGRAM...
  11. Listen            監聽(tīng)的隊列長(cháng)度                整形數
  12. Reuse             用于避免重啟時(shí)BIND時(shí)間間隙    布爾值
  13. Timeout           超時(shí)值                        整形數
  14. MultiHomed        用于連接多IP地址              布爾值

參數PeerAddr(遠程主機地址)與PeerHost(遠程主機名)基本相同,調用方式也相同,其值格式除了標準的格式外,還可以加':'號后再加端口或服務(wù),這樣的的話(huà),后面的參數PeerPort(遠程主機端口或服務(wù))的值就無(wú)效了。
參數PeerPort(遠程主機端口或服務(wù)),其值的格式可以是端口,還可以是服務(wù)名,更可以是'組合’,如:"telnet(23)";當PeerAddr(遠程主機地址)或PeerHost(遠程主機名)的值格式中指明了端口,再調用此參數時(shí),此參數的值無(wú)效。
參數LocalAddr(本地主機地址)、LocalHost(本地主機名)、LocalPort(本地主機端口或服務(wù))之間的關(guān)系與調用方式與上面介紹的三個(gè)參數PeerAddr(遠程主機地址)、PeerHost(遠程主機名)、PeerPort(遠程主機端口或服務(wù))相當。
還有一種情況,就是如果只定義了LocalPort(本地主機端口或服務(wù)),而沒(méi)有定義LocalAddr(本地主機地址)或LocalHost(本地主機名),那IO::Socket會(huì )將本地機器的地址的值默認為INADDR_ANY通配符,也就是不定義本地主機的地址值的話(huà)就定義為允許所有接口。
Proto(協(xié)議類(lèi)型)的值可以用兩種方式表示。一種是直接的字符串表示方式,如:proto=>"tcp"表示該協(xié)議類(lèi)型為T(mén)CP。第二種方式就是直接使用協(xié)議號了,EGP---8、HMP---20、ICMP---1、RAW---255、RDP---27、RVD---66、TCP---6、UDP---17、XNS-IDP---22、其他---22、ALL---0;也可以使用getprotobyname函數加協(xié)議名為參數調用獲的該值,如:proto=>getprotobyname('tcp')。該形式也表示該協(xié)議的類(lèi)型為T(mén)CP。建議還是使用第一種方式比較方便。
Type(套接字類(lèi)型)的值通常為SOCK_STREAM(流套接字)、SOCK_DGRAM(數據報套接字)、SOCK_RAW(原始套接字)等,不用說(shuō)大家都知道,TCP用的是流套接字,UDP用的是數據報套接字,構造IP包用的是原始套接字。
如果上面的參數Proto(協(xié)議類(lèi)型)與Type(套接字類(lèi)型)的值都不定義的話(huà),IO::Socket::INET就會(huì )通過(guò)程序中上下'文’部分猜估它們的值,猜估不到的話(huà)就會(huì )默認為'tcp'。
參數Listen(監聽(tīng)隊列的長(cháng)度)的值是一個(gè)整形數。它代表能接受的連接主機數量。如果您要構造服務(wù)端的話(huà),Listen這個(gè)步驟是必不可少的。
調用Reuse(在綁定前設置SO_REUSEADDR)可以免去服務(wù)器在終止到重啟之間的所停留的時(shí)間。
Timeout(超時(shí)值)以秒計算,用于連接中的connect與accept這兩個(gè)步驟,調用目的是為了在連接遠程主機不可到達時(shí)限制連接的掛起時(shí)間。
MultiHomed(用于連接多IP地址)的值是一個(gè)布爾值,當其值為真時(shí),如果要連接的主機擁有多個(gè)IP地址,則本機的new方法調用gethostbyname()窮舉其所有IP地址,直到能成功調用為止。
從樓上的列表中可以看到IO::Socket與傳統C庫的Socket API接口在調用上有什么不同了:
1)控制范圍不同。C庫提供的接口在生成SOCKET句柄時(shí)只能控制的只有域、套接字類(lèi)型、協(xié)議這幾個(gè)參數。而IO::Socket接口的創(chuàng )建語(yǔ)句(調用new方法)幾乎能決定這個(gè)套接字的所有參數。
2)調用所使用的'協(xié)議’定義部分不同。IO::Socket接口調用new方法中的參數'Proto'的值可以直接定義為'tcp',這比傳統C庫的Socket定義更為簡(jiǎn)便。
3)IO::Socket在定義時(shí)能直接定義本地主機地址、本地端口與遠程主機地址、遠程端口在一個(gè)Socket中,如果是這種情況的服務(wù)端就無(wú)需調用accept了,在I/O讀寫(xiě)部分可以直接向這個(gè)Socket進(jìn)行讀寫(xiě)操作,而無(wú)需再定義遠程客戶(hù)端的Socket了。

accept()方法:
遠程連接套接字對象變量=服務(wù)端套接字對象變量>accept();
實(shí)例:

  1. $remote_sock=$sock->accept();

講解:
此方法的調用環(huán)境與傳統C中SOCKET庫調用原理一樣,用于服務(wù)端的等待監聽(tīng)過(guò)程。無(wú)參數,返回值為遠程連接的套接字對象變量。調用此方法也是一個(gè)生成套接字的過(guò)程,只不過(guò)此套接字為遠程連接的套接字而已,它以對象變量方式存在,據有與本地套接字變量相同的屬性與方法。

accept()方法在IO::Socket包里還提供另一種雙返回值的調用方法:

(遠程連接套接字對象變量,遠程主機壓縮地址變量)=服務(wù)端對象變量->accept();
實(shí)例:

  1. ($remote_sock,$remote_addr)=$sock->accept();

講解:
與樓上一個(gè)返回值的調用方式基本相同,只是返回值中多了一個(gè)變量而已,返回值中多了個(gè)變量------遠程主機壓縮地址變量。

bind()方法:
返回值變量=服務(wù)端套接字對象變量->bind(本地端口號,本地主機網(wǎng)絡(luò )地址);
實(shí)例:

  1. $result=$sock->bind(80,'127.0.0.1');

講解:
bind方法用于在服務(wù)器端綁定主機的地址與端口。它使用的兩個(gè)參數都為未壓縮值,第一個(gè)為端口,第二個(gè)為主機的網(wǎng)絡(luò )適配器接口地址(可以使用默認的保留字INADDR_ANY,此保留字包括了主機的所有網(wǎng)絡(luò )適配器接口地址,調用它時(shí),它會(huì )以窮舉的方法窮舉所有的網(wǎng)絡(luò )適配器接口地址,直到找到為止);返回值為布爾值,用于檢測這次調用是否成功。

connect()方法:
返回值變量=套接字對象變量->connect(壓縮地址變量);
實(shí)例:

  1. $result=$sock->connect($pack_addr);

講解:
常用于TCP連接(也可用于UDP,不過(guò)不常用),調用將向遠程主機發(fā)送連接請求。參數'壓縮地址變量’為sockaddr_in形式值,返回值為布爾值。若調用此方法則建立IO::Socket::INET對象時(shí)不能賦予參數'PeerAddr'或'PeerHost'、'PeerPort',否則就會(huì )出現程序邏輯錯誤。

connect()方法也有雙參數調用方式,使用起來(lái)更簡(jiǎn)單:

返回值變量=套接字對象變量->connect(遠程端口號,遠程主機地址);
實(shí)例:

  1. $result=$sock->connect($remote_port,$remote_host);

講解:
調用的目的與樓上單參數的調用方式相當。第一個(gè)參數為遠程需要連接的主機的端口(等于new方法的參數'PeerPort'),第二個(gè)參數為需要連接的主機地址(等于new方法的參數'PeerAddr'或'PeerHost'),返回值為布爾值。

listen()方法:
返回值變量=套接字對象變量->listen(請求隊列的最大長(cháng)度值);
實(shí)例:

  1. $result=$sock->listen(20);

講解:
TCP服務(wù)端不可缺少的方法。單參數,參數為此服務(wù)端接受遠端請求隊列的最大長(cháng)度值,返回值為布爾值。調用此方法等同于在建立IO::Socket::INET對象時(shí)定義參數'Listen'的值,所以若在new方法中定義了參數'Listen'再調用此方法的話(huà)就會(huì )出現'程序定義沖突’這樣的邏輯錯誤了。

shutdown()方法:
返回值變量=套接字對象變量->shutdown(控制參數);
實(shí)例:

  1. $result=$sock->shutdown(2);

講解:
此方法是除了close外的另一個(gè)關(guān)閉套接字對象的方法。單參數,參數值為外加參數定義,下為此方法的外加參數列表:

  1. 參數值                       描述 
  2. 0                            關(guān)閉對象套接字的讀操作
  3. 1                            關(guān)閉對象套接字的寫(xiě)操作
  4. 2                            關(guān)閉對象套接字的所有操作

其返回值為布爾值。

send()方法:
成功發(fā)送的數據值變量=套接字對象變量->send(發(fā)送數據,標志值,目標地址值);
實(shí)例:

  1. $succ_bytes=$sock->send('hihi\n',0,$pack_host);

講解:
send方法是專(zhuān)門(mén)為SOCKET發(fā)送數據的特殊方法,調用格式與參數格式也基本與C庫的SOCKET API中的send函數相同。第一個(gè)參數是需要發(fā)送的數據;第二參數是標志值,不添的話(huà)默認為0;第三個(gè)參數通常只用于UDP連接,是需要連接的sockaddr_in格式地址值(注意:當第三個(gè)參數有必要一定要寫(xiě)時(shí),第二個(gè)參數也一定要加上);返回值為成功發(fā)送的數據值大小(以byte為單位)。

recv()方法:
壓縮遠程地址地址=套接字對象變量->recv(接收數據變量,接收數據值長(cháng)度,標志值);
實(shí)例:

  1. $remote_pack_address=$sock->recv($mem,100,0);

講解:
recv方法是專(zhuān)門(mén)為SOCKET接收數據的特殊方法,調用格式與參數格式也與C庫的SOCKET API基本一樣。第一個(gè)參數是存放接收后的數據的變量值;第二個(gè)參數是接收的數據的長(cháng)度值;第三個(gè)參數是標志值,默認為0就可以了(省略此值不填,系統默認也為0)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用PERL打造connect掃描器
基于JAVA Socket的底層原理分析及工具實(shí)現
TCP實(shí)現P2P通信、TCP穿越NAT的方法、TCP打洞
socket協(xié)議
用python實(shí)現網(wǎng)絡(luò )及端口掃描工具
Socket 通信之 UDP 通信
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久