Python網路編程詳解,python網路編程

來源:互聯網
上載者:User

Python網路編程詳解,python網路編程

1、伺服器就是一系列硬體或軟體,為一個或多個用戶端(服務的使用者)提供所需的“服務”。它存在唯一目的就是等待用戶端的請求,並響應它們(提供服務),然後等待更多請求。

2、用戶端/伺服器架構既可以應用於電腦硬體,也可以應用於電腦軟體。

3、在伺服器響應用戶端之前,首先會建立一個通訊節點,它能夠使伺服器監聽請求。

一、通訊端:通訊端點

1、通訊端

  通訊端是電腦網路資料結構,它體現了上節中所描述的“通訊端點”的概念。在任何類型的通訊開始之前,網路應用程式必須建立通訊端。

  有兩種類型的通訊端:基於檔案和面向網路的。

2、通訊端地址:主機-連接埠對

  如果一個通訊端像一個電話插孔-允許通訊的一些基礎設施,那麼主機名稱和連接埠號碼就像區號和電話號碼的組合。有效連接埠號碼範圍為0-65535(小於1024的連接埠號碼預留給了系統)

3、連線導向的通訊端和與不需連線的通訊端

  連線導向,在進行通訊之前必須建立一個串連。實現這種連線類型主要協議是TCP(傳輸控制通訊協定)

  無串連,在通訊之前並不需要建立串連。主要協議是UDP(使用者資料包通訊協定)

二、Python中的網路編程

1、socket()模組函數

為建立TCP/IP通訊端:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)

建立UDP/IP通訊端:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.常見的通訊端對象方法和屬性

名稱 描述
伺服器通訊端方法  
s.bind()  將地址(主機名稱、連接埠號碼對)綁定到通訊端上
s.listen() 設定並啟動TCP監聽器
s.accept() 被動接受TCP用戶端串連,一直等待直到串連到達(阻塞)
用戶端通訊端方法  
s.connect() 主動發起TCP伺服器串連
s.connect_ex() connect的擴充版本,此時會以錯誤碼的形式返回問題,而不是拋出一個異常
普通的通訊端方法  
s.recv() 接受TCP訊息
s.send() 發送TCP訊息
s.sendall() 完整的發送TCP訊息
s.recvfrom() 接收UDP訊息
s.shutdown() 關閉串連
s.close() 關閉通訊端

3、建立TCP伺服器

ss = socket()  #建立伺服器通訊端ss.bind()      #通訊端與地址綁定ss.listen()      #監聽串連inf_loop:       #伺服器無限迴圈  cs = ss.accept()     #接收用戶端串連  comm_loop:        #通訊迴圈    cs.recv()/cs.send()  #對話(接收、發送)  cs.close()       #關閉用戶端通訊端ss.close()        #關閉伺服器通訊端(可選)
#!/usr/bin/env python#TCP時間戳記伺服器from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (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、建立TCP用戶端

cs = socket()cs.connect()comm_loop:  cs.send()/cs.recv()cs.close()
#!/usr/bin/env python#TCP時間戳記用戶端from socket import *HOST = '127.0.0.1'PORT = 21567BUFSIZ = 1024ADDR = (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、建立UDP伺服器

ss = socket()ss.bind()inf_loop:  cs = ss.recvfrom()/ss.sendto()ss.close()
#!/usr/bin/env python#UDP時間戳記伺服器from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (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、建立UDP用戶端

cs = socket()comm_loop:  cs.send()/cs.recvfrom()cs.close()
#!/usr/bin/env python#UDP時間戳記用戶端from socket import *HOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (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()

以上就是本文關於Python網路編程詳解的全部內容,希望對大家有所協助。歡迎參閱:Python中enumerate函數代碼解析、python資料類型判斷type與isinstance的區別執行個體解析、python中requests庫session對象的妙用詳解等,有什麼問題可以隨時留言,有問題我就改。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.