国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 網絡編程

2019-11-06 07:56:26
字體:
來源:轉載
供稿:網友

Python 提供了兩個級別訪問的網絡服務。:

低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。

什么是 Socket?

Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。


socket()函數

Python 中,我們用 socket()函數來創建套接字,語法格式如下:

socket.socket([family[, type[, PRoto]]])

參數

family: 套接字家族可以使AF_UNIX或者AF_INETtype: 套接字類型可以根據是面向連接的還是非連接分為SOCK_STREAMSOCK_DGRAMprotocol: 一般不填默認為0.

Socket 對象(內建)方法

函數描述
服務器端套接字
s.bind()綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址。
s.listen()開始TCP監聽。backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少為1,大部分應用程序設為5就可以了。
s.accept()被動接受TCP客戶端連接,(阻塞式)等待連接的到來
客戶端套接字
s.connect()主動初始化TCP服務器連接,。一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
s.connect_ex()connect()函數的擴展版本,出錯時返回出錯碼,而不是拋出異常
公共用途的套接字函數
s.recv()接收TCP數據,數據以字符串形式返回,bufsize指定要接收的最大數據量。flag提供有關消息的其他信息,通常可以忽略。
s.send()發送TCP數據,將string中的數據發送到連接的套接字。返回值是要發送的字節數量,該數量可能小于string的字節大小。
s.sendall()完整發送TCP數據,完整發送TCP數據。將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據。成功返回None,失敗則拋出異常。
s.recvform()接收UDP數據,與recv()類似,但返回值是(data,address)。其中data是包含接收數據的字符串,address是發送數據的套接字地址。
s.sendto()發送UDP數據,將數據發送到套接字,address是形式為(ipaddr,port)的元組,指定遠程地址。返回值是發送的字節數。
s.close()關閉套接字
s.getpeername()返回連接套接字的遠程地址。返回值通常是元組(ipaddr,port)。
s.getsockname()返回套接字自己的地址。通常是一個元組(ipaddr,port)
s.setsockopt(level,optname,value)設置給定套接字選項的值。
s.getsockopt(level,optname[.buflen])返回套接字選項的值。
s.settimeout(timeout)設置套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。一般,超時期應該在剛創建套接字時設置,因為它們可能用于連接的操作(如connect())
s.gettimeout()返回當前超時期的值,單位是秒,如果沒有設置超時期,則返回None。
s.fileno()返回套接字的文件描述符。
s.setblocking(flag)如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(默認值)。非阻塞模式下,如果調用recv()沒有發現任何數據,或send()調用無法立即發送數據,那么將引起socket.error異常。
s.makefile()創建一個與該套接字相關連的文件

簡單實例

服務端

我們使用 socket 模塊的 socket 函數來創建一個 socket 對象。socket 對象可以通過調用其他函數來設置一個 socket 服務。

現在我們可以通過調用 bind(hostname, port) 函數來指定服務的 port(端口)

接著,我們調用 socket 對象的 accept 方法。該方法等待客戶端的連接,并返回 connection 對象,表示已連接到客戶端。

完整代碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 文件名:server.pyimport socket               # 導入 socket 模塊s = socket.socket()         # 創建 socket 對象host = socket.gethostname() # 獲取本地主機名port = 12345                # 設置端口s.bind((host, port))        # 綁定端口s.listen(5)                 # 等待客戶端連接while True:    c, addr = s.accept()     # 建立客戶端連接。    print '連接地址:', addr    c.send('歡迎訪問菜鳥教程!')    c.close()                # 關閉連接

客戶端

接下來我們寫一個簡單的客戶端實例連接到以上創建的服務。端口號為 12345。

socket.connect(hosname, port ) 方法打開一個 TCP 連接到主機為 hostname 端口為 port 的服務商。連接后我們就可以從服務端后期數據,記住,操作完成后需要關閉連接。

完整代碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 文件名:client.pyimport socket               # 導入 socket 模塊s = socket.socket()         # 創建 socket 對象host = socket.gethostname() # 獲取本地主機名port = 12345                # 設置端口好s.connect((host, port))print s.recv(1024)s.close()  

現在我們打開兩個終端,第一個終端執行 server.py 文件:

$ python server.py

第二個終端執行 client.py 文件:

$ python client.py 歡迎訪問菜鳥教程!

這是我們再打開第一個終端,就會看到有以下信息輸出:

連接地址: ('192.168.0.118', 62461)
上一篇:python入門基礎

下一篇:leetcode 492 python

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新密市| 南投县| 霸州市| 鹤山市| 和平区| 金溪县| 芒康县| 宝清县| 赣榆县| 丹巴县| 永吉县| 突泉县| 黎城县| 巴彦淖尔市| 淮滨县| 化州市| 灵寿县| 金堂县| 伊金霍洛旗| 临潭县| 安宁市| 如东县| 潼关县| 大厂| 那曲县| 泰顺县| 彝良县| 佛教| 连江县| 罗定市| 山丹县| 宣城市| 宜春市| 永定县| 洮南市| 成都市| 搜索| 山阴县| 读书| 南城县| 克东县|