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

首頁 > 編程 > Python > 正文

Python Socket 編程介紹

2019-11-08 02:42:38
字體:
來源:轉載
供稿:網友

Python 提供了兩個基本的 socket 模塊:

Socket 它提供了標準的BSD Socket API。SocketServer 它提供了服務器重心,可以簡化網絡服務器的開發。

下面講解下 Socket模塊功能。

Socket 類型

套接字格式:socket(family, type[,PRotocal]) 使用給定的套接族,套接字類型,協議編號(默認為0)來創建套接字

socket 類型描述
socket.AF_UNIX用于同一臺機器上的進程通信(既本機通信)
socket.AF_INET用于服務器與服務器之間的網絡通信
socket.AF_INET6基于ipV6方式的服務器與服務器之間的網絡通信
socket.SOCK_STREAM基于TCP的流式socket通信
socket.SOCK_DGRAM基于UDP的數據報式socket通信
socket.SOCK_RAW原始套接字,普通的套接字無法處理ICMP、IGMP等網絡報文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構造IP頭
socket.SOCK_SEQPACKET可靠的連續數據包服務

創建TCP Socket:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

創建UDP Socket:

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

Socket 函數

TCP發送數據時,已建立好TCP鏈接,所以不需要指定地址,而UDP是面向無連接的,每次發送都需要指定發送給誰。服務器與客戶端不能直接發送列表,元素,字典等帶有數據類型的格式,發送的內容必須是字符串數據。

服務器端 Socket 函數

Socket 函數描述
s.bind(address)將套接字綁定到地址,在AF_INET下,以tuple(host, port)的方式傳入,如s.bind((host, port))
s.listen(backlog)開始監聽TCP傳入連接,backlog指定在拒絕鏈接前,操作系統可以掛起的最大連接數,該值最少為1,大部分應用程序設為5就夠用了
s.accpet()接受TCP鏈接并返回(conn, address),其中conn是新的套接字對象,可以用來接收和發送數據,address是鏈接客戶端的地址。

客戶端 Socket 函數

Socket 函數描述
s.connect(address)鏈接到address處的套接字,一般address的格式為tuple(host, port),如果鏈接出錯,則返回socket.error錯誤
s.connect_ex(address)功能與s.connect(address)相同,但成功返回0,失敗返回errno的值

公共 Socket 函數

Socket 函數描述
s.recv(bufsize[, flag])接受TCP套接字的數據,數據以字符串形式返回,buffsize指定要接受的最大數據量,flag提供有關消息的其他信息,通常可以忽略
s.send(string[, flag])發送TCP數據,將字符串中的數據發送到鏈接的套接字,返回值是要發送的字節數量,該數量可能小于string的字節大小
s.sendall(string[, flag])完整發送TCP數據,將字符串中的數據發送到鏈接的套接字,但在返回之前嘗試發送所有數據。成功返回None,失敗則拋出異常
s.recvfrom(bufsize[, flag])接受UDP套接字的數據u,與recv()類似,但返回值是tuple(data, address)。其中data是包含接受數據的字符串,address是發送數據的套接字地址
s.sendto(string[, flag], address)發送UDP數據,將數據發送到套接字,address形式為tuple(ipaddr, port),指定遠程地址發送,返回值是發送的字節數
s.close()關閉套接字
s.getpeername()返回套接字的遠程地址,返回值通常是一個tuple(ipaddr, port)
s.getsockname()返回套接字自己的地址,返回值通常是一個tuple(ipaddr, port)
s.setsockopt(level, optname, value)設置給定套接字選項的值
s.getsockopt(level, optname[, buflen])返回套接字選項的值
s.settimeout(timeout)設置套接字操作的超時時間,timeout是一個浮點數,單位是秒,值為None則表示永遠不會超時。一般超時期應在剛創建套接字時設置,因為他們可能用于連接的操作,如s.connect()
s.gettimeout()返回當前超時值,單位是秒,如果沒有設置超時則返回None
s.fileno()返回套接字的文件描述
s.setblocking(flag)如果flag為0,則將套接字設置為非阻塞模式,否則將套接字設置為阻塞模式(默認值)。非阻塞模式下,如果調用recv()沒有發現任何數據,或send()調用無法立即發送數據,那么將引起socket.error異常。
s.makefile()創建一個與該套接字相關的文件

Socket 編程思想

TCP 服務器 1、創建套接字,綁定套接字到本地IP與端口

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind()

2、開始監聽鏈接

s.listen()

3、進入循環,不斷接受客戶端的鏈接請求

While True:    s.accept()

4、接收客戶端傳來的數據,并且發送給對方發送數據

s.recv()s.sendall()

5、傳輸完畢后,關閉套接字

s.close()

TCP 客戶端 1、創建套接字并鏈接至遠端地址

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect()

2、鏈接后發送數據和接收數據

s.sendall()s.recv()

3、傳輸完畢后,關閉套接字

Socket 編程實踐之服務器端代碼

import socketHOST = '192.168.1.100'PORT = 8001s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT))s.listen(5)print 'Server start at: %s:%s' %(HOST, PORT)print 'wait for connection...'while True:    conn, addr = s.accept()    print 'Connected by ', addr    while True:        data = conn.recv(1024)        print data        conn.send("server received you message.")# conn.close()

Socket 編程實踐之客戶端代碼

import socketHOST = '192.168.1.100'PORT = 8001s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))while True:    cmd = raw_input("Please input msg:")    s.send(cmd)    data = s.recv(1024)    print data    #s.close()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北票市| 嘉祥县| 老河口市| 安龙县| 祥云县| 香港| 天峻县| 新津县| 丹棱县| 徐水县| 凤庆县| 澄城县| 平塘县| 孝昌县| 肇源县| 偃师市| 通州市| 宁津县| 关岭| 万盛区| 雷山县| 西吉县| 兴化市| 洪洞县| 两当县| 仁化县| 普兰店市| 陇川县| 沧州市| 安岳县| 灌云县| 扬州市| 上思县| 衡东县| 阳谷县| 陕西省| 乐平市| 沂南县| 县级市| 黄大仙区| 桦甸市|