日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基礎之Socket套接字詳解

瀏覽:25日期:2022-06-21 14:31:28
前言

Python語言提供了Socket套接字來實現網絡通信。

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

服務器和客戶端的源代碼

服務器端

#coding=utf-8#創建TCP服務器import socketimport timefrom time import ctimeHOST = ’127.0.0.1’PORT = 8080BUFSIZE=1024sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((HOST, PORT)) sock.listen(5)addr=(HOST,PORT)while True: print(’waiting for connection...’) sock,addr =sock.accept() print(’...connected from:’,addr) while True:data =sock.recv(BUFSIZE).decode()print(’date=’,data)if not data: breaksock.send((’[%s] %s’ %(ctime(),data)).encode())sock.close()

客戶端

#coding=utf-8#創建TCP客戶端import socketHOST = ’127.0.0.1’PORT = 8080BUFSIZE = 1024ADDR=(HOST,PORT)sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect((HOST, PORT)) while True: data = input(’> ’) if not data:break sock.send(data.encode()) data = sock.recv(BUFSIZE).decode() if not data:break print(data)sock.close()

執行結果顯示:

首先執行服務器端,結果如圖1:

python基礎之Socket套接字詳解

緊接著執行客戶端,如圖2

python基礎之Socket套接字詳解

需要注意的是:服務器端和客戶端需要在兩個IDLE Shell中打開,否則客戶機一啟動,服務器程序就會中止執行,而客戶端又連不上服務器,從而報錯,如圖3

python基礎之Socket套接字詳解

我們在圖2中輸入一些需要傳輸的信息,然后回車,在服務端可以看到收到了相關信息,如圖4(客戶端發送信息),圖5(服務器端接收信息)

python基礎之Socket套接字詳解python基礎之Socket套接字詳解

源代碼解析

我們從服務器端開始看起,先上一部分代碼:

import socketimport timefrom time import ctime

這三句是導入了三個模塊,分別是socket 模塊、time模塊和ctime模塊。

1)socket 模塊當中提供了與socket 套接字相關的各項功能,后面用到了很多,這里先介紹一個,其他一會再介紹:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

功能:創建套接字,并把創建好的套接字賦給一個變量sock,下面程序中與套接字相關的操作都由sock來完成。

格式:socket.socket([family[, type[, proto]]])

參數:

family: 套接字家族,可以使 AF_UNIX 或者 AF_INET。AF_INET,是指面向網絡的,因特網;AF_UNIX,基于文件的;在本例中,我們使用AF_INET,利用因特網來進行通信。

type: 套接字類型,可以根據是面向連接的還是非連接分為 SOCK_STREAM 或 SOCK_DGRAM。

SOCK_STREAM:對應著TCP,提供了一個面向連接、可靠的數據傳輸服務,數據無差錯、無重復的發送且按發送順序接收。內設置流量控制,避免數據流淹沒慢的接收方。數據被看作是字節流,無長度限制。

SOCK_DGRAM:對應著UDP,提供無連接服務。數據包以獨立數據包的形式被發送,不提供無差錯保證,數據可能丟失或重復,順序發送,可能亂序接收。

本例中選TCP協議。

protocol: 一般不填默認為 0。

2)time模塊,完成python中與時間相關的計算,例如time.sleep(5)延時5秒,time time() 返回當前時間的時間戳等等。下面的ctime也是其中一個功能,函數把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式,可以便于我們觀察。轉換以后的格式如下:

print “time.ctime() : %s” % time.ctime()

結果:time.ctime() : Tue Feb 17 10:00:18 2013

在我們的例子中,圖4的圈2所表示的就是轉換后的時間。

HOST = ’127.0.0.1’PORT = 8080BUFSIZE=1024sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((HOST, PORT)) sock.listen(5)addr=(HOST,PORT)

看完頭部之后,我們來看第二部分。

前三句定義了三個變量:HOST、PORT、BUFSIZE,這三個變量分別是服務器的IP地址,服務器的端口,接收的最大數據量。

第四句sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 定義了socket 套接字。

第五句sock.bind((HOST, PORT)),將IP地址和端口綁定給定義的套接字sock。

第六句sock.listen(5),開始 TCP 監聽。中間的5表示在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少為 1,大部分應用程序設為 5 就可以了。

第七句addr=(HOST,PORT),定義了一個變量addr,并且將地址以元組的形式賦值給addr。

while True: print(’waiting for connection...’) sock,addr =sock.accept() print(’...connected from:’,addr) while True:data =sock.recv(BUFSIZE).decode()print(’date=’,data)if not data: breaksock.send((’[%s] %s’ %(ctime(),data)).encode())sock.close()sock.close()

這是服務器代碼的最后一部分,也是通信的主體,首先進入一個while True:的永真循環,進入之后執行print(‘waiting for connection…’),這就是圖1上藍色字所表示的一部分。

第三行執行sock,addr =sock.accept(),sock.accept()是被動接受TCP客戶端連接,(阻塞式)等待連接的到來,當客戶機啟動提交請求后,服務器接受請求,并將客戶端的IP地址等信息存入變量addr中。

第四行執行print(’…connected from:’,addr),所以輸入字符串…connected from:以及客戶端傳來的IP地址和端口。

以上服務器和客戶端的通信就連接起來了。

下面開始傳送數據,又進入一個永真循環,代碼:

while True:data =sock.recv(BUFSIZE).decode()print(’date=’,data)if not data: breaksock.send((’[%s] %s’ %(ctime(),data)).encode())sock.close()

第二行:data =sock.recv(BUFSIZE).decode()。

sock.recv()表示接收 TCP 數據,數據以字符串形式返回,BUFSIZE指定要接收的最大數據量。

decode() 將其他編碼的字符串解碼成unicode格式。

這里要說明一下,上圖:

python基礎之Socket套接字詳解

字符串在python內部是用unicode編碼來表示,而在硬盤是utf-8格式。所以在存儲和使用時要進行格式轉換,轉換的方式:

decode 將其他編碼的字符串(例如utf-8)解碼成unicode格式。

encode 將unicode編碼成另一種編碼格式(例如utf-8)。

當然decode和encode 不止可以轉換utf-8類型,轉換的類型可以通過 encoding 來指定,不過我們常用的就是這個。

總結一下,data =sock.recv(BUFSIZE).decode()執行結束就表示把客戶端的數據接收過來存放到了data這個變量中。

下面進行第三行print(‘date=’,data),打印數據,結果就是圖5中的圈3所表示的。

第四行及第五行: 如果沒有接收到數據,則跳出循環,繼續監聽。

if not data:break

第六行 sock.send((’[%s] %s’ %(ctime(),data)).encode()),向客戶端發送轉換格式(encode)后的數據。

數據包括兩部分,第一部分是ctime(),表示以字符串形式表示的時間,data表示變量中存的信息.前面還有一部分’[%s] %s’中的%s格式化字符串,形成需要的輸出格式。

最后一句sock.close(),關閉套接字。

這樣服務器端就完成了。我們再來看客戶端。

import socketHOST = ’127.0.0.1’PORT = 8080BUFSIZE = 1024ADDR=(HOST,PORT)sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect((HOST, PORT))

這部只解釋幾句,HOST = ‘127.0.0.1’ ,PORT = 8080,這兩句是服務器端的IP地址和端口號。

sock.connect((HOST, PORT)) 這一句是利用創建好的socket套接字主動初始化TCP服務器連接,就是向服務器提出申請,服務器端用sock.accept()接受請求。

這一句執行完之后,通信就建立起來了,在服務器端會執行print(’…connected from:’,addr),結果如圖5圈2所示。

while True: data = input(’> ’) if not data:break sock.send(data.encode()) data = sock.recv(BUFSIZE).decode() if not data:break print(data)sock.close()

接下來進入永真循環,先是input函數,輸出> 后等待輸入,如圖2所示。例如輸入hi,server,如圖4的圈1,然后后兩句是

if not data:break

如果沒有輸入,則跳出循環。

第五行sock.send(data.encode()),將輸入的數據轉換格式后將數據發送給服務器端,這時把hi,server發送給服務器端,服務器用data =sock.recv(BUFSIZE).decode()來接收,同時用print(‘date=’,data)打印出來,結果如5的圈3所示。

這時,服務器會繼續執行sock.send((’[%s] %s’ %(ctime(),data)).encode()),把當前的時間和數據發送給客戶端。

而在客戶端,執行data = sock.recv(BUFSIZ).decode(),所以客戶端會接收到相應的數據,并且打印出來,結果如圖4的圈2所示。

以上就是Socket套接字的TCP通信。

到此這篇關于python基礎之Socket套接字詳解的文章就介紹到這了,更多相關python Socket詳解內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩一区二区三区精品| 麻豆精品在线观看| 美女视频黄 久久| 精品成人免费一区二区在线播放| 日韩视频中文| 日欧美一区二区| 日韩精品成人| 视频一区欧美精品| 国产精品啊v在线| 日韩成人高清| 日本成人在线网站| 国产麻豆综合| 国产精品黄网站| 日韩精品电影| 国产色噜噜噜91在线精品| 中文一区一区三区免费在线观| 久久久久91| 国产精品一区二区三区美女| 亚洲激情av| 欧美日韩在线二区| 久久久久中文| 999久久久亚洲| 免费观看亚洲天堂| 国产精品嫩模av在线| 91精品啪在线观看国产爱臀| 蜜桃视频一区二区三区| 蜜桃av.网站在线观看| 色综合五月天| 久草免费在线视频| 精品无人区麻豆乱码久久久 | 四虎影视精品| 欧美精品自拍| 欧美日韩激情在线一区二区三区| 欧美国产另类| 波多视频一区| 亚洲欧美日韩综合国产aⅴ| 一区二区三区四区在线看| 国产美女视频一区二区| 免费成人av在线播放| 亚洲一二三区视频| 黄色在线一区| 亚洲精品大全| 日韩精品1区| 欧美日韩国产观看视频| 国产精品一区高清| 日韩啪啪电影网| 91九色精品| 欧美一区二区三区久久精品| 欧美在线综合| 日av在线不卡| www.九色在线| 国产精品毛片一区二区在线看| 一区二区三区网站| 日韩在线观看一区二区| 国产日韩中文在线中文字幕| 国产aⅴ精品一区二区四区| 国产一区二区三区国产精品| 日韩av福利| 国产成人免费精品| 亚洲精品第一| 欧美片第1页综合| 欧美成人a交片免费看| 国产精品亚洲四区在线观看| 色爱av综合网| 99久久99久久精品国产片果冰| 欧美日韩免费观看一区=区三区| 在线视频亚洲| se01亚洲视频| 喷白浆一区二区| 不卡一区2区| 亚洲精品在线影院| 久久久久久婷| 精品国产18久久久久久二百| 深夜福利亚洲| 亚洲三级在线| 日韩一区精品| 蜜桃久久久久久| 亚洲三级精品| 久久亚洲道色| 蜜桃视频第一区免费观看| 亚洲精品观看| 国产精品一区二区美女视频免费看| 亚洲一区观看| 欧美亚洲tv| 中文在线中文资源| 老司机久久99久久精品播放免费| 国产一区二区精品久| 日本不卡不码高清免费观看| 亚洲一区亚洲| 欧美日韩国产探花| 91成人精品| 久久男女视频| 久久伊人久久| 日本色综合中文字幕| 欧美日韩国产亚洲一区| 日韩在线欧美| 加勒比视频一区| 亚洲无线一线二线三线区别av| 成人久久一区| 精品久久不卡| 精品久久国产一区| 最新国产拍偷乱拍精品| 国产精品2023| 日本a级不卡| 日本中文字幕视频一区| 一区免费在线| 性欧美videohd高精| av综合电影网站| 日韩精品影视| 99久久精品网站| 精品一区二区三区免费看| 国产在视频一区二区三区吞精| 欧美韩日一区| 激情久久久久久久| 成人在线黄色| 日韩精品看片| 久久亚洲风情| 免费精品一区| 五月天激情综合网| 97精品一区| 日韩精品一区二区三区中文在线 | 麻豆久久一区二区| 日韩国产一区二区| 国产亚洲毛片在线| 国内精品美女在线观看| 激情偷拍久久| 亚洲欧美视频| 欧美欧美黄在线二区| 一区二区三区网站| 国产日产一区| 国产一区2区| 国产精品久久久一区二区| 亚洲特色特黄| 国产精品高潮呻吟久久久久| 国产欧美欧美| 丝瓜av网站精品一区二区| 国产欧美另类| 91亚洲精品视频在线观看 | 亚洲少妇在线| 国产亚洲久久| 四虎影视精品| 国产精品午夜一区二区三区| 99国产精品一区二区| 91成人福利| 欧美激情aⅴ一区二区三区 | 免费人成网站在线观看欧美高清| 亚洲五月综合| 国产精品av一区二区| 丝袜美腿亚洲一区二区图片| se01亚洲视频| 亚洲最新无码中文字幕久久| 麻豆免费精品视频| 欧美激情另类| 亚洲精品护士| 色综合狠狠操| 国产精品一区二区三区av麻| 日本成人中文字幕| 日韩精品91亚洲二区在线观看| 免费人成黄页网站在线一区二区| 日韩二区在线观看| 亚洲三区欧美一区国产二区| 一本一本久久| 欧洲一区二区三区精品| 日韩精品免费视频人成| 国产日韩欧美在线播放不卡| 欧美国产一级| 亚洲日本久久| 日韩在线观看| 国产精品xxx在线观看| 老司机精品视频网| 国产一级久久| 午夜精品免费| 久久精品青草| 蜜桃av一区二区三区电影| 精品国产第一福利网站| 日韩1区2区日韩1区2区| 青草国产精品久久久久久| 国产精品调教视频| 在线亚洲成人| 一区在线免费观看| 最近高清中文在线字幕在线观看1| 国产精品115| 日韩av网站在线免费观看| 亚洲欧美日韩国产综合精品二区 | 亚洲毛片视频| 久久久精品网| 欧美激情另类| 久久国产精品成人免费观看的软件| 欧美不卡视频| 日韩中文字幕| 免费欧美日韩| 蜜桃av一区二区在线观看| 亚洲制服一区| 中文字幕日韩亚洲| 亚洲精品动态| 蜜臀久久久久久久| 日本一区二区高清不卡| 国产精品主播| 综合干狼人综合首页| 视频一区二区三区在线|