06python基礎高階之網路程式設計

2021-09-26 21:13:06 字數 2537 閱讀 4906

一. ip位址

ip是可聯網裝置在網路中的邏輯位址,在同一網路中是唯一的

用來在網路中標記某個裝置

ifconfig/ipconfig檢視網絡卡資訊

192.168.***.*** 私有ip

127.0.0.1 環迴位址(本機ip位址)

二. 埠 port

1、作用

埠是傳輸資料的通道,好比教室的門,是資料傳輸必經之路

埠號用來標識主機中的網路程序

2、埠號範圍和知名埠

埠號範圍:0-65535

知名埠範圍:0-1023

知名埠列舉:

80 http服務

21 ftp服務

23 telnet服務

22 ssh服務

443 https服務

三、socket套接字

1、不同電腦上程序通訊如何標識

ip位址+埠號

2、socket是什麼

socket是程序間通訊的一種方式,簡稱套接字

3、socket的作用

使用socket套接字來完成程序間的通訊

四、tcp介紹

tcp 即傳輸控制協議,它是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。

tcp特點:

1、面向連線

在通訊之前需要先建立連線,通訊完成後,再斷開連線

2、可靠傳輸

tcp 採用傳送應答機制

超時重傳

錯誤校驗

流量控制和阻塞管理

五、tcp客戶端程式的開發流程

1、建立tcp套接字

2、跟伺服器建立鏈結

3、傳送資料

3.1、傳送資料

3.2、接收資料

4、關閉tcp套接字

六、tcp服務端

1、實現流程(列舉生活中例子)

生活中如何使用手機?

1、買手機 ------------>(建立乙個tcp_server_socket服務端物件 )

2、插入手機卡、使手機有**號碼 ------------>(繫結埠)

3、把手機設定為接聽狀態 ------------> (tcp_server_socket.listen())

4、等著別人打** ------------> (new_socket, client_address = tcp_server_socket.accept())

5、通話聊天(收發資料) ------------> ( .recv() .send())

6、結束通話** ------------> (new_socket.close())

7、晚上11點睡覺,關機 ------------> (tcp_server_socket.close())

2、具體實現流程

1、建立tcp服務端套接字

2、繫結埠

3、設定套接字物件為被動監聽狀態,因為預設是主動的

4、阻塞等待接收客戶端的連線

5、收發資料

6、關閉新建立出來的套接字

7、關閉tcp服務端套接字

3、tcp伺服器如何迴圈接收乙個客戶端訊息?

while true:

# 5、收發資料

recv_data = new_socket.recv(1024)

print("接收到來自%s的訊息:%s" % (addr, recv_data.decode("gbk")))

new_socket.send("收到了你的訊息".encode())

4、tcp伺服器如何迴圈為多個客戶端提供服務?

5、recv返回值的含義

正常情況下 在通訊過程中recv函式的返回值就是 接收到的資料

如果客戶端先斷開了tcp連線,那麼recv()將會解阻塞,接收到乙個0位元組資料

七、 oserror: [errno 98] address already in use產生原因和解決辦法

1、產生時機

pycharm執行tcp服務端,已經有客戶端連線的情況下,伺服器先斷開連線, 之後馬上重啟伺服器

2、產生原因

現象:pycharm後台會繼續讓程式再執行一會(埠會被占用多一些時間)

原因:tcp協議規定 - 2msl時間(1-4min, 實際一般30s到2min) 內主動斷開連線的一方 不能重新繫結 剛剛使用的埠

設定套接字選項的目的:

忽略2msl時間限制 可以立即重新繫結 剛剛使用的埠

設定套接字選項 set socket option 針對套接字設定選項 重用位址選項 1設定 0取消

socket.sol_socket表示當前套接字

socket.so_reuseaddr表示重用位址選項

tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

06 python的基礎 編碼小知識

1 編碼型別ascii a 00000010 8位 乙個位元組 unicode a 00000000 00000001 00000010 00000100 32位 四個位元組 中 00000000 00000001 00000010 00000110 32位 四個位元組 utf 8 a 001000...

06 Python之函式呼叫與定義

python內建了很多有用的函式,可以直接呼叫 要呼叫乙個函式,需要知道函式的名稱和引數,比如求絕對值的函式abs,只有乙個引數 也可以在互動式命令列通過help abs 檢視abs函式的幫助資訊 help abs help on built in function abs in module bu...

06 Python輸入 輸出

1.python2 raw input 格式 result raw input 提示資訊 功能會等待使用者輸入內容,直到使用者按下enter 會將使用者輸入的內容當做 字串 傳遞給接收的變數 input 格式 result input 提示資訊 功能會等待使用者輸入內容,直到使用者按下enter 會...