成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入Python中的網絡通信

系統
計算機與網絡設備兩情侶要談戀愛,相互通信,那么雙方就必須有規則。基于相同的方法,不同的硬件、操作系統之間的通信,都需要一種規則。而我們就把這種規則稱為協議(protocol)。

[[351789]]

 TCP/IP

計算機與網絡設備兩情侶要談戀愛,相互通信,那么雙方就必須有規則。基于相同的方法,不同的硬件、操作系統之間的通信,都需要一種規則。而我們就把這種規則稱為協議(protocol)。

TCP/IP 是互聯網相關各類協議族的總稱。TCP/IP是指TCP和IP這兩種協議。TCP/IP是在IP協議的通信過程中,使用到的協議族的統稱。

TCP/IP協議族按層次分別為 應用層,傳輸層,網絡層,數據鏈路層,物理層。可以按照不同的模型分4層或者是7層。

將TCP/IP分為5層,越靠下越接近硬件。

應用層:應用程序收到傳輸層的數據后,接下來就是要進行解讀,解讀必須要先規定好格式,而應用層就是規定應用程序的數據格式,主要協議有HTTP等。

傳輸層:該層為兩臺主機上的應用程序提供端到端的通信,傳輸層有兩個傳輸協議為TCP(傳輸控制協議)和UDP(用戶數據報協議),TCP是一個可靠的面向連接的協議,UDP是不可靠或者說無連接的協議。

網絡層:決定如何將數據從發送方到接收方,是建立主機到主機的通信。

數據鏈路層:控制網絡層與物理層之間的通信,主要功能是保證物理線路上進行可靠的數據傳遞。

物理層:該層負責物理傳輸,與鏈路有關,也與傳輸的介質有關。


客戶端和服務器具體的

HTTP

圖片出自《圖解HTTP》書籍

三次握手,四次揮手

TCP三次握手,四次揮手,Runsen也不會怎么說,就把網上最通俗的圖放在下面 了,還是別看我很牛逼,牛逼的是做圖的大佬。

三次握手

四次揮手


圖片出自公眾號(程序員小小溪),更多的名詞和概念查找參考公眾號程序員小小溪的文章~[1]

Socket

網絡編程有一個重要的概念 socket(套接字),應用程序可以通過它發送或接收數據,套接字允許應用程序將 I/O 插入到網絡中,并與網絡中的其他應用程序進行通信。

我是來偷窺Python中的網絡通信Socket,不小心偷窺到了一個非常不錯的Socket好圖


將上面的圖片整理步驟

1.建立連接:

  • 服務器:socket--->address--->bind--->listen--->accept
  • 客戶端:socket--->connect

2.通信:收一發:recv(1024)<---send(byte)/sendall(byte)

3.關閉連接:close()

實現簡單的通訊程序

服務端,server.py

  1. #導入socket模塊 
  2. import socket 
  3. #創建套接字 或使用server = socket.socket() 
  4. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  5. #定義綁定的ip和端口,用元組定義 
  6. ip_port = ('127.0.0.1', 8888) 
  7. #綁定監聽:bind(address),在AF_INET下,以元組(ip,port)的形式表示地址 
  8. server.bind(ip_port) 
  9. #設置最大連接數,默認為1 
  10. server.listen(5) 
  11. #不斷接受連接:one by one 
  12. while True
  13.     print("等待數據連接中……"
  14.     #接受客服端數據請求 
  15.     conn, address = server.accept() 
  16.     ''
  17.     向客服端返回信息 
  18.     (注意:python3.x以上,網絡數據的發送接收都是byte類型, 
  19.     發送接收String類型數據時需要對數據進行編碼(發送:messages.enconde();接收后轉為String類型:messages.deconde()),pyhon2.x則直接發送數據無須編碼) 
  20.     ''
  21.     messages = "連接成功!" 
  22.     conn.send(messages.encode()) 
  23.     #計數信息條數 
  24.     count = 0 
  25.     #一個連接中,不斷的接受客戶端發來的數據 
  26.     while True
  27.         data = conn.recv(1024) 
  28.         #打印客戶端發來的數據信息 
  29.         print(data.decode()) 
  30.         #判斷是否退出當前連接,等在下一個連接 
  31.         if data == b'exit'
  32.           break 
  33.         #處理客戶端數據(如:響應請求等) 
  34.         count = count + 1 
  35.         string = "第" + str(count) + "條信息:" + data.decode() 
  36.         conn.send(string.encode()) 
  37.         #主動關閉連接 
  38.     conn.close() 

客戶端,client.py

  1. import socket 
  2.  
  3. #創建套接字 
  4. client = socket.socket() 
  5. #訪問的服務器的ip和端口,用元組定義 
  6. ip_port = ("127.0.0.1", 8888) 
  7. #連接服務器主機 
  8. client.connect(ip_port) 
  9. #同一鏈接中,不斷向服務器發生數據或請求 
  10. while True
  11.     #接收服務器發送或響應的數據 
  12.     data = client.recv(1024) 
  13.     #打印接收的數據;python3.x以上數據要編碼(發送:data.enconde();接收后轉為String類型:data.deconde()) 
  14.     print(data.decode()) 
  15.     messages = input("請輸入發生或請求的數據(exit退出):"
  16.     client.send(messages.encode()) 
  17.     if messages == 'exit'
  18.         break 
  19.     ''
  20.     #接收服務器發送或響應的數據 
  21.     data = client.recv(1024) 
  22.     #打印接收的數據;python3.x以上數據要編碼,發送enconde();接收deconde() 
  23.     print(data.decode()) 
  24.     ''
  25. #關閉連接 
  26. client.close() 

具體效果如下圖所示。


多線程通信TCP服務器與多個TCP客戶端同時進行連續通信,只需要通過threading創建多線程任務handle_client就可以了。

  1. import socket 
  2. import threading 
  3. import random 
  4.  
  5.  
  6. def handle_client(): 
  7.     # 接受客戶端請求鏈接 
  8.     client, address = server.accept() 
  9.     print("[*] Accept connection from: %s:%d" % (address[0], address[1])) 
  10.     messages = "Hello World!" 
  11.     client.send(messages.encode()) 
  12.     # 連續與當前連接的客戶端通信 
  13.     while True
  14.         # 接受客戶端數據 
  15.         request = (client.recv(1024)).decode() 
  16.         # 判斷是否結束通信 
  17.         if request == 'exit'
  18.             break 
  19.         print("[*] Received from %s:%d : %s" % (address[0], address[1], request)) 
  20.         # 發送響應信息給客戶端 
  21.         client.send((str(random.randint(1, 1000)) + ":" + "ACK!").encode()) 
  22.     # 關閉當前連接 
  23.     client.close() 
  24.  
  25.  
  26. if __name__ == "__main__"
  27.     # 創建套接字 
  28.     server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  29.     # 定義綁定ip和端口 
  30.     ip = '127.0.0.1' 
  31.     port = 8888 
  32.     # 綁定監聽 
  33.     server.bind((ip, port)) 
  34.     # 設置最大連接數,默認為1 
  35.     server.listen(5) 
  36.     print("[*] Listening on %s:%d" % (ip, port)) 
  37.     # 循環開啟線程,接受多個客戶端的鏈接通信 
  38.     while True
  39.         # 創建一個線程 
  40.         client_handler = threading.Thread(target=handle_client) 
  41.         # 開啟線程 
  42.         client_handler.start() 

 

python3.x以上,網絡數據messages的發送接收都是byte類型,若要發送接收String類型數據時需要通過messages.enconde()對數據進行編碼,接收后通過messages.deconde()轉為String類型。pyhon2.x則直接發送數據無須編碼。

本文已收錄 GitHub,傳送門~[2] ,里面更有大廠面試完整考點,歡迎 Star。

Reference
[1] 參考公眾號程序員小小溪的文章:
https://mp.weixin.qq.com/s/KK1dnNoHrbjMyuhQptaBAQ

[2] 傳送門~:
https://github.com/MaoliRUNsen/runsenlearnpy100

 

責任編輯:姜華 來源: Python之王
相關推薦

2022-12-05 09:25:17

Kubernetes網絡模型網絡通信

2017-01-15 17:44:56

node網絡通信Socket

2019-10-22 08:11:43

Socket網絡通信網絡協議

2024-09-14 09:26:17

Python網絡編程

2009-12-10 15:39:34

動態路由協議

2025-04-07 00:55:00

RustUDP編程

2009-08-24 17:20:13

C#網絡通信TCP連接

2019-04-29 10:26:49

TCP網絡協議網絡通信

2014-09-16 17:00:02

UDP

2010-06-14 19:13:28

網絡通信協議

2021-08-13 11:27:25

網絡通信數據

2010-06-09 11:57:42

網絡通信協議

2010-06-29 10:15:31

局域網故障

2020-07-06 07:52:10

Kubernetes網絡通信

2010-07-01 15:45:22

網絡通信協議

2025-04-17 01:44:00

2024-11-25 16:39:17

2024-02-20 19:53:57

網絡通信協議

2010-06-09 11:31:55

網絡通信協議

2016-08-25 11:17:16

CaaS華為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色片视频 | 国产精品国产成人国产三级 | 国产1区 | 狠狠综合久久av一区二区老牛 | 午夜av电影院 | 成年人免费看 | 亚洲视频手机在线 | 香蕉视频黄色 | 在线成人免费视频 | 久久久黄色 | 欧美一区二区三区 | 日韩精品久久久 | 欧美精品久久久 | 成人精品福利 | 青娱乐国产 | www.五月天婷婷.com | 91久久夜色 | 成年人视频在线免费观看 | 尤物视频在线免费观看 | 日韩人体在线 | 色男人的天堂 | 国产探花在线精品一区二区 | 国产精品久久精品 | 国产精品电影网 | 亚洲视频在线一区 | 久久精品天堂 | 午夜激情在线视频 | 国产日韩欧美精品一区二区 | 精品视频国产 | 麻豆精品一区二区三区在线观看 | 在线看h| 日本亚洲欧美 | 日韩中文字幕视频在线观看 | 日韩欧美一区二区三区免费观看 | 国产专区在线 | 中文字幕亚洲一区二区三区 | 一区二区久久精品 | 欧美一区二区三区 | 免费一二区 | 91大神在线看| 欧美一级黄色免费看 |