欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python網(wǎng)絡(luò)編程詳解

 更新時(shí)間:2017年10月31日 10:29:45   作者:瀟瀟、寒  
這篇文章主要介紹了Python網(wǎng)絡(luò)編程詳解,涉及具體代碼示例,還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。

1、服務(wù)器就是一系列硬件或軟件,為一個(gè)或多個(gè)客戶端(服務(wù)的用戶)提供所需的“服務(wù)”。它存在唯一目的就是等待客戶端的請(qǐng)求,并響應(yīng)它們(提供服務(wù)),然后等待更多請(qǐng)求。

2、客戶端/服務(wù)器架構(gòu)既可以應(yīng)用于計(jì)算機(jī)硬件,也可以應(yīng)用于計(jì)算機(jī)軟件。

3、在服務(wù)器響應(yīng)客戶端之前,首先會(huì)創(chuàng)建一個(gè)通信節(jié)點(diǎn),它能夠使服務(wù)器監(jiān)聽(tīng)請(qǐng)求。

一、套接字:通信端點(diǎn)

1、套接字

  套接字是計(jì)算機(jī)網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu),它體現(xiàn)了上節(jié)中所描述的“通信端點(diǎn)”的概念。在任何類型的通信開(kāi)始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字。

  有兩種類型的套接字:基于文件和面向網(wǎng)絡(luò)的。

2、套接字地址:主機(jī)-端口對(duì)

  如果一個(gè)套接字像一個(gè)電話插孔-允許通信的一些基礎(chǔ)設(shè)施,那么主機(jī)名和端口號(hào)就像區(qū)號(hào)和電話號(hào)碼的組合。有效的端口號(hào)范圍為0-65535(小于1024的端口號(hào)預(yù)留給了系統(tǒng))

3、面向連接的套接字和與無(wú)連接的套接字

  面向連接,在進(jìn)行通信之前必須建立一個(gè)連接。實(shí)現(xiàn)這種連接類型主要協(xié)議是TCP(傳輸控制協(xié)議)

  無(wú)連接,在通信之前并不需要建立連接。主要協(xié)議是UDP(用戶數(shù)據(jù)報(bào)協(xié)議)

二、Python中的網(wǎng)絡(luò)編程

1、socket()模塊函數(shù)

為創(chuàng)建TCP/IP套接字:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)

創(chuàng)建UDP/IP套接字:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.常見(jiàn)的套接字對(duì)象方法和屬性

名稱 描述
服務(wù)器套接字方法  
s.bind()  將地址(主機(jī)名、端口號(hào)對(duì))綁定到套接字上
s.listen() 設(shè)置并啟動(dòng)TCP監(jiān)聽(tīng)器
s.accept() 被動(dòng)接受TCP客戶端連接,一直等待直到連接到達(dá)(阻塞)
客戶端套接字方法  
s.connect() 主動(dòng)發(fā)起TCP服務(wù)器連接
s.connect_ex() connect的擴(kuò)展版本,此時(shí)會(huì)以錯(cuò)誤代碼的形式返回問(wèn)題,而不是拋出一個(gè)異常
普通的套接字方法  
s.recv() 接受TCP消息
s.send() 發(fā)送TCP消息
s.sendall() 完整的發(fā)送TCP消息
s.recvfrom() 接收UDP消息
s.shutdown() 關(guān)閉連接
s.close() 關(guān)閉套接字

3、創(chuàng)建TCP服務(wù)器

ss = socket()  #創(chuàng)建服務(wù)器套接字
ss.bind()      #套接字與地址綁定
ss.listen()      #監(jiān)聽(tīng)連接
inf_loop:       #服務(wù)器無(wú)限循環(huán)
  cs = ss.accept()     #接收客戶端連接
  comm_loop:        #通信循環(huán)
    cs.recv()/cs.send()  #對(duì)話(接收、發(fā)送)
  cs.close()       #關(guān)閉客戶端套接字
ss.close()        #關(guān)閉服務(wù)器套接字(可選)
#!/usr/bin/env python
#TCP時(shí)間戳服務(wù)器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
  print('waiting for connecting...')
  tcpClisock, addr = tcpSerSock.accept()
  print('...connected from:',addr)
  while True:
    data = tcpClisock.recv(BUFSIZ)
    if not data:
      break
    tcpClisock.send('[%s] %s' % (bytes(ctime(),'utf-8'),data))
  tcpClisock.close()
tcpSerSock.close()

4、創(chuàng)建TCP客戶端

cs = socket()
cs.connect()
comm_loop:
  cs.send()/cs.recv()
cs.close()
#!/usr/bin/env python
#TCP時(shí)間戳客戶端
from socket import *
HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpClisock = socket(AF_INET,SOCK_STREAM)
tcpClisock.connect(ADDR)
while True:
  data = input('> ')
  if not data:
    break
  tcpClisock.send(data)
  data = tcpClisock.recv(BUFSIZ)
  if not data:
    break
  print(data.decode('utf-8'))
tcpClisock.close()

5、創(chuàng)建UDP服務(wù)器

ss = socket()
ss.bind()
inf_loop:
  cs = ss.recvfrom()/ss.sendto()
ss.close()
#!/usr/bin/env python
#UDP時(shí)間戳服務(wù)器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
  print('waiting for message...')
  data, addr=udpSerSock.recvfrom(BUFSIZ)
  udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
  print('...received from and returned to:',addr)
udpSerSock.close()

6、創(chuàng)建UDP客戶端

cs = socket()
comm_loop:
  cs.send()/cs.recvfrom()
cs.close()
#!/usr/bin/env python
#UDP時(shí)間戳客戶端
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpClisock = socket(AF_INET,SOCK_DGRAM)
while True:
  data = input('> ')
  if not data:
    break
  udpClisock.sendto(data,ADDR)
  data, ADDR=udpClisock.recvfrom(BUFSIZ)
  if not data:
    break
  print(data)
udpClisock.close()

以上就是本文關(guān)于Python網(wǎng)絡(luò)編程詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:Python中enumerate函數(shù)代碼解析python數(shù)據(jù)類型判斷type與isinstance的區(qū)別實(shí)例解析、python中requests庫(kù)session對(duì)象的妙用詳解等,有什么問(wèn)題可以隨時(shí)留言,有問(wèn)題我就改。。。

相關(guān)文章

  • Python使用chrome配置selenium操作詳解

    Python使用chrome配置selenium操作詳解

    這篇文章主要為大家詳細(xì)介紹了chrome配置selenium操作的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python繪制雙Y軸折線圖以及單Y軸雙變量柱狀圖的實(shí)例

    python繪制雙Y軸折線圖以及單Y軸雙變量柱狀圖的實(shí)例

    今天小編就為大家分享一篇python繪制雙Y軸折線圖以及單Y軸雙變量柱狀圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 在PyCharm中實(shí)現(xiàn)添加快捷模塊

    在PyCharm中實(shí)現(xiàn)添加快捷模塊

    今天小編就為大家分享一篇在PyCharm中實(shí)現(xiàn)添加快捷模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python使用wxPython實(shí)現(xiàn)計(jì)算器

    Python使用wxPython實(shí)現(xiàn)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了Python使用wxPython實(shí)現(xiàn)計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python獲取時(shí)間戳的實(shí)現(xiàn)示例(10位和13位)

    python獲取時(shí)間戳的實(shí)現(xiàn)示例(10位和13位)

    這篇文章主要介紹了python獲取時(shí)間戳的實(shí)現(xiàn)示例(10位和13位),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序

    Python設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序

    這篇文章主要介紹了Python如何設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 最新評(píng)論