網絡編程(part11)--socket模塊方法及socket套接字屬性

鄙人學習筆記



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!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章