日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python课程思路_学习python课程第二十六天

發布時間:2023/12/4 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python课程思路_学习python课程第二十六天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.? ? 傳輸層

在上述三層協議中我們,ip協議幫我們定位到子網絡. mac地址幫我們定位到一臺計算機,并與其通訊,

但本質上,計算機的通訊是為了應用程序能夠通訊,而一臺計算機上不可能運行一個應用程序

問題:

就像我們同時運行QQ軟件和微信軟件, 當計算機收到一個數據包時, 需要知道這個數據包到底是給

哪個應用程序的.

解決方案:

為每一個應用程序綁定一個端口號,? 端口號就是一個數字, 取值范圍為 0 -- 65536 其中 0 -- 1023是

系統保留的

再次捋清思路:

端口定位應用程序, ip 定位網絡, mac 定位計算機

可以通過這三個地址,找到全世界計算機中唯一的一個應用程序, 使我們編寫網絡應用程序成為可能.

傳輸層協議 :

為什么要有傳輸層協議 ?

應用程序可相互傳遞數據了, 還記得在ip協議中有一個路由算法么? 會自動選擇最佳的傳輸路徑,

將導致你的數據包可能走了不同的路線, 造成接受順序錯亂, 以及發生丟包等, 為了保證數據傳輸的

完整性, 誕生了傳輸層協議!

TCP :基于鏈接傳輸數據, 可保證數據傳輸的完整性

優點 :通過三次握手來與服務器建立連接

可以保證數據的完整性.

a機器給b機器發送數據包, 要求b機器必須立即返回一個確認包,

a機器會等待一段時間,如果超時還沒有收到確認, 則重發數據.

缺點:

傳輸效率低.

使用場景 :? 文字聊天. 支付寶轉賬等,

UDP : 不需要建立連接,直接發送

缺點:

不能保證數據的完整性

優點:

傳輸效率比TCP高很多

使用場景 :? 視頻通話,語音通話, 游戲等.

socket 是什么?

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,

Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,

一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。

所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的

規定去編程,寫出的程序自然就是遵循tcp/udp標準的。

使用 socket:

在使用socket的時候用戶需要關心的是, ip地址, port端口. 傳輸協議TCP/UDP,你要發送的數據data

在寫網絡編程的時候,必然是兩臺代碼, 對應著客戶端和服務器.

socket 的工作流程 :

一個生活中的場景。你要打電話給一個朋友,先撥號,朋友聽到電話鈴聲后提起電話,

這時你和你的朋友就建立起了連接,就可以講話了。等交流結束,掛斷電話結束此次交談。

生活中的場景就解釋了這工作原理。

先從服務器端說起。服務器端先初始化Socket,然后與端口綁定(bind),對端口進行監聽(listen),

調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然后連接服務器

(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,

服務器端接收請求并處理請求,然后把回應數據發送給客戶端,客戶端讀取數據,最后關閉

連接,一次交互結束

服務端套接字函數

s.bind() 綁定(主機,端口號)到套接字

s.listen() 開始TCP監聽

s.accept() 被動接受TCP客戶的連接,(阻塞式)等待連接的到來

客戶端套接字函數

s.connect() 主動初始化TCP服務器連接

s.connect_ex() connect()函數的擴展版本,出錯時返回出錯碼,而不是拋出異常

公共用途的套接字函數

s.recv() 接收TCP數據

s.send() 發送TCP數據(send在待發送數據量大于己端緩存區剩余空間時,數據丟失,不會發完)

s.sendall() 發送完整的TCP數據(本質就是循環調用send,sendall在待發送數據量大于己端緩存區剩余空間時,數據不丟失,循環調用send直到發完)

s.recvfrom() 接收UDP數據

s.sendto() 發送UDP數據

s.getpeername() 連接到當前套接字的遠端的地址

s.getsockname() 當前套接字的地址

s.getsockopt() 返回指定套接字的參數

s.setsockopt() 設置指定套接字的參數

s.close() 關閉套接字

面向鎖的套接字方法

s.setblocking() 設置套接字的阻塞與非阻塞模式

s.settimeout() 設置阻塞套接字操作的超時時間

s.gettimeout() 得到阻塞套接字操作的超時時間

面向文件的套接字的函數

s.fileno() 套接字的文件描述符

s.makefile() 創建一個與該套接字相關的文件

使用socket來完成TCP通訊

應該先完成服務器的代碼編寫

TCP 服務器 :

import? socket

# 1. 先創建一個代表服務器的socket對象

s = socket.socket()

# 2.? 綁定ip地址與 端口號

# 127.0.0.1? 表示當前電腦的ip

address = ('127.0.0.1',8090)? ? ? ? ? #傳入ip與端口

s.bind((address))

print ('服務器已啟動')

#? 3. 開始監聽這個端口

#? 參數5 表示可以有五個處于半連接狀態的連接.(不是控制最大連接數的參數.)

s.listen(5)

# 4. 接受連接請求

# 該函數是阻塞的. 會卡主程序的執行,必須等到有一個客戶端進來才會繼續執行.

它會返回一個元組, 第一個代表客戶端的socket對象, 第二個是客戶端的端口

client,c_address = s.accept()

print('有一個連接已建立')

# 5.讀寫數據

# 接受數據 , 參數1024是需要接受的字節數

res = client.recv(1024)

print(res)

# 6. 關閉連接

s.close()? ? (一般不會關閉服務器.都是關閉客戶端)

TCP 客戶端:

import? socket

# 1. 創建客戶端的socket對象

c = socket.socket()

# 2. 連接到服務器

server_address = ('127.0.0.1',8080)? ? # 端口必須跟服務器一樣

# 3.建立連接

c.connect(server_address)

# 4.讀寫數據

# 發送數據到服務器

c.send('hello 我是客戶端')

# 5. 關閉連接

c.close()

使用socket來完成UDP通訊,一樣是先創建服務端

UDP 服務端:

import? socket

# 1.創建socket對象

# 必須自己定義參數

s = socket.socket(type = socket.SOCK_DGRAM)

# 2. 綁定端口和ip

s.bind(('127.0.0.1',10000))

# 3. 接受數據. 接受數據的時候,沒有客戶端來連接,也會卡主,等待客戶端來連接了.再正常運行程序

res = s.recv(1024)

print(res)

# 4.

UDP? 客戶端 :

import? socket

# 1. 創建客戶端

c = socket.socket(type = socket.SOCK_DGRAM)

# 不需要連接, 可以直接發送數據,只需要知道對方的ip和端口即可.

c.sendto('這是UDP的客戶端'.encode('utf-8'),(127.0.0.1,10000))

# 關閉客戶端

c.close()

總結

以上是生活随笔為你收集整理的python课程思路_学习python课程第二十六天的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。