python概念 Socket到底有多騷

2022-04-06 00:07:45 字數 2645 閱讀 6247

socket究竟是什麼呢?

簡單來說socket就是用來完成客戶端與伺服器之間的通訊

例如瀏覽器訪問網頁,例如網路遊戲等一切基於客戶端伺服器來實現的c/s架構程式

socket是基於網際網路osi七層協議的乙個結構,準確的說是基於建議網際網路模型osi五層協議的介面

如圖所示,自行腦補!

此處延伸乙個概念:套接字

套接字在最開始的時候,是應用於程序與程序之間的通訊,之後被廣泛應用到網際網路,基本上分為兩個種族

基於檔案型別的套接字:af_unix

基於網路型別的套接字:af_inet

而我們今後關心的重點肯定是網路型別,所以今後我們會對af_inet分解研究

套接字的工作流程:

這裡我們可以看出來socket的基本工作流程了,也大致看了一下socket通訊時所用到的方法

服務端套接字函式

服務端套接字函式

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通訊呢?

**示例:

1#2

import

socket

3 phone =socket.socket(socket.af_inet,socket.sock_stream)

4 phone.bind(("

192.168.16.2

",8800))

5 phone.listen(5)

6while

true:

7 con,addr =phone.accept()

8while

true:

9try

:10 datas = con.recv(1024)

11if

not datas : break

#應對服務死迴圈

12if(datas == b"

egon"):

13 con.send(b"sb"

)14else:15

con.send(datas)

16except

exception as e:

17break

18con.close()

19 phone.close()

伺服器端

1#2

import

socket

3 gophone =socket.socket(socket.af_inet,socket.sock_stream)

4 gophone.connect(("

192.168.16.2

",8800))

5while

true:

6 msg= input("

>>>:")

7ifnot msg : continue

8 gophone.send(msg.encode("

utf8"))

9print(gophone.recv(1024).decode("

gbk"))

客戶端今天暫時寫到這裡,明天繼續

socket程式設計 socket基本概念

socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面,不僅可以用於本機的程序間通訊,也可以用於網路上不同主機的程序間通訊 而管道只能在同一臺主機進行通訊 應用層依靠socket進行資料傳輸,我們不必關心底層的核心,即底層資料的傳輸細節,只關心套介面的存在。可以把套介面看成程序...

socket概念通訊基石

socket起源於unix,而unix linux基本模式就是 一切皆檔案 都可以用 開啟open 讀寫write read 關閉close 模式來操作。socket也是該模式的實現,即 socket也是一種特殊的檔案,socket的api函式就是對socket物件進行檔案操作 讀 寫io 開啟 關...

網路程式設計 socket相關概念

socket介紹 socket位址 了解網路程式設計需要先了解計算機通訊中位元組的儲存順序 考慮32位機,cpu累加器一次能裝載4位元組。這4位元組在記憶體的排列順序影響被累加器裝載成的整數值。位元組序分為大端位元組序 big endian 和小端位元組序 little endian 傳送端總是要把...