Chapter8 網(wǎng)絡(luò)編程--Socket編程

1屠阻、Socket管道的創(chuàng)建使用



UDP服務(wù)器實(shí)現(xiàn):

意圖:

建立Socket管道對(duì)象,可操縱管道對(duì)象發(fā)送或接受消息


示例:

s = socket(socket.AF_INET,socket.SOCK_DGRAM)

? ?#建立了一個(gè)使用IPV4地址,采用UDP通訊的套接字對(duì)象 s


Api:?

socket( family, type [,protocol])?

?????????????????????????????Family: 協(xié)議種類, 取值為AF_INET(IPv4)? ? ?

? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? AF_INET6(IPv6)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Type:? 套接字類型,取值為SOCK_STREAM

? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?SOCK_DGRAM

?????????????????????????????????????????????SOCK_STREAM:TCP通訊的流式套接字

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????SOCK_DGRAM:UDP通訊的數(shù)據(jù)報(bào)套接字

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Protocol:一般可以省略,默認(rèn)值為0闹丐。



意圖:

將UDP套接字對(duì)象s,掛載到UDP廣播的發(fā)出者127.0.0.1被因,(本機(jī))的 5005 號(hào)端口(端口可變卿拴,進(jìn)程地址)


示例:

s.bind( ( '127.0.0.1' , 5005 ) )

? ? ? ? ?#將s掛載到UDP的發(fā)出者 127.0.0.1 的5005端口


Api:

bind(address [,port] )

????????#address為廣播發(fā)出者




意圖:

UDP發(fā)出者從套接字對(duì)象s中提取出信息內(nèi)容 data 與發(fā)送者地址 addr


示例:

data , addr = s.recvfrom(1024)

? ? ? ? ? #從套接字對(duì)象s接受特定大小的串


Api:

data, addr = s.recvfrom(bufsize)?

????????#bufsize接收的串的最大大小 ? ? ? ?



UDP客戶端--連接-->UDP服務(wù)器:

前置條件:

上文UDP服務(wù)器已經(jīng)建立好梨与,UDP服務(wù)器不斷循環(huán)準(zhǔn)備接受來自外界的消息



意圖:

客戶端新建IPV4 | UDP套接字對(duì)象堕花,設(shè)定服務(wù)端的IPV4地址host,端口號(hào) port粥鞋,發(fā)送消息


示例: ? ? ?

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

port=5005缘挽;

host='127.0.0.1' #設(shè)置

msg=input() ?#獲取發(fā)送串

s.sendto(msg.encode("utf-8") , (host,port))?

? ? ? ? ?#將串使用utf-8編碼,向host的port端口發(fā)送串


Api:

sendto(data,(addr, port))

? ? ? ? ? ? ? ? ?data:串內(nèi)容

? ? ? ? ? ? ? ? ?addr:服務(wù)主機(jī)地址?

? ? ? ? ? ? ? ? ?port:服務(wù)主機(jī)的端口號(hào)




問1:為什么UDP客戶端不需要綁定自身的地址端口號(hào)呻粹?

答:創(chuàng)建套接字s后直接調(diào)用sendto()壕曼,中間的隱含操作是,在發(fā)送數(shù)據(jù)之前操作系統(tǒng)會(huì)為該客戶端套接字隨機(jī)分配一個(gè)合適的udp端口尚猿,將該套接字和本地地址信息綁定 ? ? ?

?? ??

問2:host是否可以為空窝稿?

答:可以,百度說“這表示bind()會(huì)使用任何可用的地址”凿掂,大概是說會(huì)首先檢索本機(jī)的地址,然后一般會(huì)綁定本機(jī)地址



TCP服務(wù)器實(shí)現(xiàn):

意圖:

同UDP服務(wù)器纹蝴,建立套接字對(duì)象s庄萎,綁定本機(jī)地址和端口


示例:

s=socket(AF_INET,SOCK_STREAM,0)????#同UDP

s.bind('', 4700)????#綁定至本機(jī)ip,4700端口

s.listen(20)????#允許最大連接數(shù)20

cs,caddr= s.accept() ?

????????#阻塞直到有客戶端連接塘安,則返回此TCP對(duì)象cs糠涛,和客戶端地址caddr ? ? ? ? ? ?

????【注意此時(shí)socket對(duì)象s不再使用,取而代之的是cs對(duì)象】

cs.sendall(bytes(data,'utf-8'))?

????????#向TCP連接的對(duì)象兼犯,發(fā)送串

data =?cs.recv(1024).decode('utf-8')?

????????#接受來自TCP對(duì)象cs的忍捡,最多大小為Buf的串

cs.close() #服務(wù)器TCP關(guān)閉

s.close() #服務(wù)器socket關(guān)閉



TCP客戶端實(shí)現(xiàn):

示例:

cs=socket(AF_INET,SOCK_STREAM,0) #創(chuàng)建套接字

? ? ?【跟服務(wù)端不同,客戶端直接用申請(qǐng)出的套接字對(duì)象cs】

cs.connect(“127.0.0.1”切黔,4700) ??

????????#cs連接到host服務(wù)器4700端口 ? ? ? ? ?

cs.sendall(bytes(data,'utf-8'))

data=cs.recv(buf).decode('utf-8')

????????#向cs發(fā)送信息串砸脊,以及接收信息串

cs.close()?

????????#管道關(guān)閉


API:

s.connect(address)? ? ? ? ? ? ? ?

????????address=(host, port)

????????host = 主機(jī)

????????port = 端口



問3:UDP協(xié)議下,是否能采取先連接 connect 再直接調(diào)用 send方法傳送信息纬霞?

答:可以凌埂,UDP有同樣的協(xié)議

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诗芜,隨后出現(xiàn)的幾起案子瞳抓,更是在濱河造成了極大的恐慌埃疫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孩哑,死亡現(xiàn)場離奇詭異栓霜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)横蜒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門叙淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愁铺,你說我怎么就攤上這事鹰霍。” “怎么了茵乱?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵茂洒,是天一觀的道長。 經(jīng)常有香客問我瓶竭,道長督勺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任斤贰,我火速辦了婚禮智哀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荧恍。我一直安慰自己瓷叫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布送巡。 她就那樣靜靜地躺著摹菠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骗爆。 梳的紋絲不亂的頭發(fā)上次氨,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音摘投,去河邊找鬼煮寡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犀呼,可吹牛的內(nèi)容都是我干的幸撕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼圆凰,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼杈帐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤挑童,失蹤者是張志新(化名)和其女友劉穎累铅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體站叼,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃兽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尽楔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片投储。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阔馋,靈堂內(nèi)的尸體忽然破棺而出玛荞,到底是詐尸還是另有隱情,我是刑警寧澤呕寝,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布勋眯,位于F島的核電站,受9級(jí)特大地震影響下梢,放射性物質(zhì)發(fā)生泄漏客蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一孽江、第九天 我趴在偏房一處隱蔽的房頂上張望讶坯。 院中可真熱鬧,春花似錦岗屏、人聲如沸辆琅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涎跨。三九已至,卻和暖如春崭歧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撞牢。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工率碾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屋彪。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓所宰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畜挥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仔粥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355