鄙人學習筆記
socket模塊方法及socket套接字屬性
部分socket模塊方法
gethostname()
#獲取計算機名
gethostbyname()
#通過名稱,獲取主機ip地址
getservbyname()
#獲取服務端口號
getservbyport()
#獲取端口對應服務
inet_aton()
#將IP轉換爲bytes子串
inet_ntoa()
# 將bytes子串轉換爲IP地址
舉個例子
代碼:
結果:
套接字屬性
sockfd.type
#套接字類型
sockfd.family
#套接字的網絡地址類型
sockfd.getsockname()
#獲取套接字綁定地址(如果我們不綁定,則系統會自動獲取)
sockfd.fileno()
#獲取套接字的文件描述符(IO那個部分學了,不要忘了這裏的網絡操作也是IO操作)
sockfd.getpeername()
#獲取連接套接字客戶端地址(必須是連接套接字對象,才能調用這個函數,否則會報錯)
sockfd.setsockopt(level,option,value)
"""
功能:設置套接字選項(使現有套接字的功能更加豐富)
參數: level 選項類別(我們常用的大類:SOL_SOCKET)
option 具體選項內容
value 選項值(期望值)
"""
sockfd.getsockopt(level,option)
#獲取套接字選項值
備註1:我們通過socket()生成套接字對象, 那麼我們調用的send()、recv()、listen()、accept()也是套接字屬性(屬性分爲:屬性變量/屬性方法,或者稱爲實例變量/實例方法)
備註2:套接字選項分爲幾個大類,幾個大類下還有很多小項,每個小項下還有具體的值。我們對每一類套接字的設置,都可能改變套接字的原有屬性行爲。
備註3:套接字大類SOL_SOCKET下的幾個小類(具體選項內容):
舉個例子
代碼1:
結果1:
代碼2(自己不綁定IP地址時):
結果2:
代碼3(自己綁定IP地址時):
結果3:
代碼4(設置套接字類別):
結果我就不演示了,若有疑問自己學習。
寫個案例
要求:發送端讀取圖片,然後將圖片發送給,接收端,接收端再將接收的數據寫入新的文件中。
首先,我們瞧一瞧,我們的圖片TX.jpg:
真好看呀~
我們再看一下項目下的文件列表:
OK,現在正式開始敲代碼。
發送端代碼:
from socket import *
s = socket()
s.connect(('127.0.0.1',8888))
f = open('TX.jpg','rb')
#讀取內容進行發送
while True:
data = f.read(1024) # 字節串
if not data:
break
s.send(data)
f.close()
s.close()
接收端代碼:
from socket import *
s = socket()
s.bind(('127.0.0.1',8888))
s.listen(5)
print("等待連接......")
c,addr = s.accept()
print("Connect from",addr)
f = open('new_TX.jpg','wb')
#接受內容寫入文件
while True:
data = c.recv(1024) #字節串
if not data:
break
f.write(data)
f.close()
c.close()
s.close()
print("已關閉")
先運行接收端(服務端), 再運行發送端(客戶端),運行結果:
接收端運行結果:
再看一下文件列表:
成功創建new_TX.jpg文件啦~
再打開一下new_TX.jpg檢查一下:
Perfect!