黑客第一章補(bǔ)充

網(wǎng)絡(luò)

今天閱讀第二章的時(shí)候發(fā)現(xiàn)有一些網(wǎng)絡(luò)模塊很不熟悉缎谷,返回第一章好好閱讀了下socket模塊的簡(jiǎn)單應(yīng)用酒奶,然后百度了一些socket庫(kù)的使用說(shuō)明关摇,現(xiàn)在就記錄在這里

socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”肆汹,對(duì)于文件用【打開(kāi)】【讀寫(xiě)】【關(guān)閉】模式來(lái)操作怕吴。socket就是該模式的一個(gè)實(shí)現(xiàn),socket即是一種特殊的文件县踢,一些socket函數(shù)就是對(duì)其進(jìn)行的操作(讀/寫(xiě)IO转绷、打開(kāi)、關(guān)閉)
基本上硼啤,Socket 是任何一種計(jì)算機(jī)網(wǎng)絡(luò)通訊中最基礎(chǔ)的內(nèi)容议经。例如當(dāng)你在瀏覽器地址欄中輸入 http://www.cnblogs.com/ 時(shí),你會(huì)打開(kāi)一個(gè)套接字,然后連接到 http://www.cnblogs.com/ 并讀取響應(yīng)的頁(yè)面然后然后顯示出來(lái)煞肾。而其他一些聊天客戶端如 gtalk 和 skype 也是類(lèi)似咧织。任何網(wǎng)絡(luò)通訊都是通過(guò) Socket 來(lái)完成的。
socket和file的區(qū)別:
  1籍救、file模塊是針對(duì)某個(gè)指定文件進(jìn)行【打開(kāi)】【讀寫(xiě)】【關(guān)閉】
  2习绢、socket模塊是針對(duì) 服務(wù)器端 和 客戶端Socket 進(jìn)行【打開(kāi)】【讀寫(xiě)】【關(guān)閉】

image.png

sk.bind(address)
  s.bind(address) 將套接字綁定到地址。address地址的格式取決于地址族蝙昙。在AF_INET下闪萄,以元組(host,port)的形式表示地址。
sk.listen(backlog)
  開(kāi)始監(jiān)聽(tīng)傳入連接奇颠。backlog指定在拒絕連接之前败去,可以掛起的最大連接數(shù)量。
backlog等于5烈拒,表示內(nèi)核已經(jīng)接到了連接請(qǐng)求圆裕,但服務(wù)器還沒(méi)有調(diào)用accept進(jìn)行處理的連接個(gè)數(shù)最大為5
這個(gè)值不能無(wú)限大,因?yàn)橐趦?nèi)核中維護(hù)連接隊(duì)列
sk.setblocking(bool)
  是否阻塞(默認(rèn)True)荆几,如果設(shè)置False吓妆,那么accept和recv時(shí)一旦無(wú)數(shù)據(jù),則報(bào)錯(cuò)吨铸。
sk.accept()
  接受連接并返回(conn,address),其中conn是新的套接字對(duì)象耿战,可以用來(lái)接收和發(fā)送數(shù)據(jù)。address是連接客戶端的地址焊傅。
  接收TCP 客戶的連接(阻塞式)等待連接的到來(lái)
sk.connect(address)
  連接到address處的套接字。一般狈涮,address的格式為元組(hostname,port),如果連接出錯(cuò)狐胎,返回socket.error錯(cuò)誤。
sk.connect_ex(address)
  同上歌馍,只不過(guò)會(huì)有返回值握巢,連接成功時(shí)返回 0 ,連接失敗時(shí)候返回編碼松却,例如:10061
sk.close()
  關(guān)閉套接字
sk.recv(bufsize[,flag])
  接受套接字的數(shù)據(jù)暴浦。數(shù)據(jù)以字符串形式返回,bufsize指定最多可以接收的數(shù)量晓锻。flag提供有關(guān)消息的其他信息歌焦,通常可以忽略砚哆。
sk.recvfrom(bufsize[.flag])
  與recv()類(lèi)似独撇,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址纷铣。
sk.send(string[,flag])
  將string中的數(shù)據(jù)發(fā)送到連接的套接字卵史。返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù)量可能小于string的字節(jié)大小搜立。即:可能未將指定內(nèi)容全部發(fā)送以躯。
sk.sendall(string[,flag])
  將string中的數(shù)據(jù)發(fā)送到連接的套接字,但在返回之前會(huì)嘗試發(fā)送所有數(shù)據(jù)啄踊。成功返回None忧设,失敗則拋出異常。
內(nèi)部通過(guò)遞歸調(diào)用send社痛,將所有內(nèi)容發(fā)送出去见转。
sk.sendto(string[,flag],address)
  將數(shù)據(jù)發(fā)送到套接字,address是形式為(ipaddr蒜哀,port)的元組斩箫,指定遠(yuǎn)程地址。返回值是發(fā)送的字節(jié)數(shù)撵儿。該函數(shù)主要用于UDP協(xié)議乘客。
sk.settimeout(timeout)
  設(shè)置套接字操作的超時(shí)期,timeout是一個(gè)浮點(diǎn)數(shù)淀歇,單位是秒易核。值為None表示沒(méi)有超時(shí)期。一般浪默,超時(shí)期應(yīng)該在剛創(chuàng)建套接字時(shí)設(shè)置牡直,因?yàn)樗鼈兛赡苡糜谶B接的操作(如 client 連接最多等待5s )
sk.getpeername()
  返回連接套接字的遠(yuǎn)程地址。返回值通常是元組(ipaddr,port)纳决。
sk.getsockname()
  返回套接字自己的地址碰逸。通常是一個(gè)元組(ipaddr,port)
sk.fileno()
  套接字的文件描述符

connect時(shí)需要指定socket的AF_FAMILY和端口類(lèi)別:
AF_INET、AF_INET6阔加、AF_LOCAL
SOCK_STREAM(TCP)饵史、SOCK_DGRAM(UDP)、SOCK_RAW胜榔、SOCK_PACKET胳喷、SOCK_SEQPACKET

指定IP地址和TCP端口,使用socket連接夭织,獲取服務(wù)的banner

s.connect(("192.168.x.xx",21))
ans = s.recv(1024)
prnt ans```

###threading模塊的應(yīng)用
threading提供了一個(gè)比thread模塊更高層的API來(lái)提供線程的并發(fā)性吭露。這些線程并發(fā)運(yùn)行并共享內(nèi)存。 

     一尊惰、Thread的使用 目標(biāo)函數(shù)可以實(shí)例化一個(gè)Thread對(duì)象奴饮,每個(gè)Thread對(duì)象代表著一個(gè)線程纬向,可以通過(guò)start()方法,開(kāi)始運(yùn)行戴卜。 
     這里對(duì)使用多線程并發(fā)逾条,和不適用多線程并發(fā)做了一個(gè)比較: 
首先是不使用多線程的操作: 
代碼如下:

!/usr/bin/python

compare for multi threads

import time

def worker():
print "worker"
time.sleep(1)
return

if name == "main":
for i in xrange(5):
worker()

執(zhí)行結(jié)果如下: 
    ![image.png](http://upload-images.jianshu.io/upload_images/2616921-93d38c367bc3fa05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下面是使用多線程并發(fā)的操作: 
代碼如下: 

!/usr/bin/python

import threading
import time

def worker():
print "worker"
time.sleep(1)
return

for i in xrange(5):
t = threading.Thread(target=worker)
t.start()

 ![image.png](http://upload-images.jianshu.io/upload_images/2616921-c66ce962cab0e377.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

可以明顯看出使用了多線程并發(fā)的操作,花費(fèi)時(shí)間要短的很多投剥。
更詳細(xì)threading用法請(qǐng)見(jiàn)以下鏈接:
http://blog.chinaunix.net/uid-27571599-id-3484048.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末师脂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子江锨,更是在濱河造成了極大的恐慌吃警,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啄育,死亡現(xiàn)場(chǎng)離奇詭異酌心,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挑豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)安券,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人氓英,你說(shuō)我怎么就攤上這事侯勉。” “怎么了铝阐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵址貌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我徘键,道長(zhǎng)练对,這世上最難降的妖魔是什么隘擎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任械念,我火速辦了婚禮,結(jié)果婚禮上垄琐,老公的妹妹穿的比我還像新娘赠制。我一直安慰自己,他們只是感情好挟憔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布钟些。 她就那樣靜靜地躺著,像睡著了一般绊谭。 火紅的嫁衣襯著肌膚如雪政恍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天达传,我揣著相機(jī)與錄音篙耗,去河邊找鬼迫筑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宗弯,可吹牛的內(nèi)容都是我干的脯燃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蒙保,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辕棚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邓厕,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逝嚎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后详恼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體补君,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年昧互,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挽铁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硅堆,死狀恐怖屿储,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渐逃,我是刑警寧澤够掠,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站茄菊,受9級(jí)特大地震影響疯潭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜面殖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一竖哩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脊僚,春花似錦相叁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乌企,卻和暖如春虑润,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背加酵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工拳喻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哭当,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓冗澈,卻偏偏與公主長(zhǎng)得像钦勘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渗柿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1三個(gè)相關(guān)數(shù)據(jù)結(jié)構(gòu). 關(guān)于socket的創(chuàng)建个盆,首先需要分析socket這個(gè)結(jié)構(gòu)體,這是整個(gè)的核心朵栖。 104 str...
    ice_camel閱讀 2,824評(píng)論 1 8
  • Socket創(chuàng)建函數(shù) socket.socket(socket_family, socket_type, prot...
    JianMing閱讀 6,010評(píng)論 1 13
  • http://python.jobbole.com/85231/ 關(guān)于專(zhuān)業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,574評(píng)論 1 118
  • socket通信原理 socket又被叫做套接字,它就像連接到兩端的插座孔一樣,通過(guò)建立管道颊亮,將兩個(gè)不同的進(jìn)程之間...
    jiodg45閱讀 1,140評(píng)論 0 1
  • 過(guò)年這段時(shí)間,我集中觀看了一部分名人的視頻演講陨溅,比如讓大家定個(gè)小目標(biāo)先賺1個(gè)億的萬(wàn)達(dá)集團(tuán)創(chuàng)始人王建林终惑,當(dāng)初...
    佳霖的世界閱讀 1,400評(píng)論 0 2