第二十六天- C/S架構 通信流程 socket

来源:https://www.cnblogs.com/xi1419/archive/2018/11/22/10004676.html
-Advertisement-
Play Games

1.C/S架構 C/S架構:Client與Server ,中文意思:客戶端與伺服器端架構,這種架構也是從用戶層面(也可是物理層面)來劃分的。這裡客戶端一般指需先安裝再執行的應用程式,對操作系統依賴性較大;服務端即是這類程式對應的伺服器。 B/S架構:browser/server,瀏覽器端與伺服器端架 ...


 

1.C/S架構

  C/S架構:Client與Server ,中文意思:客戶端與伺服器端架構,這種架構也是從用戶層面(也可是物理層面)來劃分的。這裡客戶端一般指需先安裝再執行的應用程式,對操作系統依賴性較大;服務端即是這類程式對應的伺服器。

  B/S架構:browser/server,瀏覽器端與伺服器端架構,也是C/S架構的一種,只是這個客戶端不需要大家去安裝什麼應用程式,只需在瀏覽器上通過HTTP請求伺服器端相關的資源(網頁資源),客戶端Browser瀏覽器就能進行增刪改查。

 

2.通信流程

  以京東為例:

    第一步:打開瀏覽器,想要請求訪問京東,在地址欄輸入了網址:www.jd.com。(www.jd.com是功能變數名稱就是一個IP地址的名稱,IP地址不好記,所有有了功能變數名稱。)

    第二步:先將請求信息發給了交換機,然後交給了路由器,路由發給DNS伺服器,通過DNS協議去找我們要訪問的京東的IP地址

    第三步:查到的京東伺服器對應的IP地址之後,路由器通過路由協議找到一個路由轉發的最優路徑,將你的請求信息還送給這個IP地址的京東的路由器

    第四步:京東的路由器發給了京東網站的伺服器上

    第五步:京東網站伺服器按照來的時候的路徑,在返回給你他自己的網站

    第六步:當你打開瀏覽器時,系統自動給它一個編號,叫做埠號,當你電腦收到京東發的消息時,你的電腦通過埠號找瀏覽器,瀏覽器拿到京東的網站信息,然後將網站呈現在了自己的瀏覽器上

  

  參考圖:

  補充:埠+IP能夠確定一臺電腦上的某一個應用程式

 

3.初識socket

  socket 又稱為套接字,看看基本格式:

  server端:

 1 import socket
 2 sk = socket.socket()
 3 sk.bind(('127.0.0.1',8898))  #把地址綁定到套接字
 4 sk.listen()          #監聽鏈接
 5 conn,addr = sk.accept() #接受客戶端鏈接
 6 ret = conn.recv(1024)  #接收客戶端信息
 7 print(ret)       #列印客戶端信息
 8 conn.send(b'hi')        #向客戶端發送信息
 9 conn.close()       #關閉客戶端套接字
10 sk.close()        #關閉伺服器套接字(可選)

  client端

1 import socket
2 sk = socket.socket()           # 創建客戶套接字
3 sk.connect(('127.0.0.1',8898))    # 嘗試連接伺服器
4 sk.send(b'hello!')
5 ret = sk.recv(1024)         # 對話(發送/接收)
6 print(ret)
7 sk.close()            # 關閉客戶套接字

 

 

4.相關練習

# 1.
# server端:接收時間戳時間,轉換成格式化時間
# client端:每隔10秒中把時間戳發給server端,time.time()
 1 # server端
 2 
 3 import socket
 4 import time
 5 
 6 server = socket.socket()  # 創建socket對象
 7 # ip_port = ('192.168.15.84',8001)  # 創建ip+埠
 8 ip_port = ('127.0.0.1',8001)
 9 server.bind(ip_port)  # 綁定埠
10 server.listen()  # 開啟監聽
11 # 等待對方連接...
12 conn, addr = server.accept()  # 拿到連接通道conn和通信地址addr(ip+埠)
13 
14 while 1:
15     # 收消息 限制大小1024b
16     from_client_msg = conn.recv(1024)  # 服務端(必須)通過conn通道接收消息
17 
18     res_msg = time.gmtime(float(from_client_msg.decode('utf-8')))  # 還原成float後 再把時間戳結構化
19     print(time.strftime("%Y-%m-%d %H:%M:%S",res_msg))  # 格式化時間
# client
 1 import socket
 2 import time
 3 
 4 
 5 client = socket.socket()
 6 server_ip_port = ('127.0.0.1',8001)  # 指定要連接到的地址
 7 client.connect(server_ip_port)  # 連接地址
 8 
 9 while 1:
10     msg = time.time()
11     res_msg = str(msg).encode('utf-8')  # 註意:直接float會報錯 先轉成字元串再編碼!!
12     client.send(res_msg)  # 給服務端發送消息
13     time.sleep(5)



# 2. 一直對話的程式
# server收一個發一個
# client發一個收一個

#server
 1 import socket
 2 
 3 server = socket.socket()
 4 
 5 ip = ('127.0.0.1',8002)  # IP隨網路更換而改變
 6 server.bind(ip)
 7 server.listen()  # 開啟監聽
 8 conn,addr = server.accept()  # 阻塞,等待連接,再解包(元祖)獲得;連接通道conn和對方通信地址addr(ip+埠)
 9 
10 while 1:
11     from_client_msg = conn.recv(1024)  # 接收消息
12     from_client_msg = from_client_msg.decode('utf-8')
13     print('來自忽悠的消息',from_client_msg)
14     if from_client_msg == 'bye':
15         break
16 
17     msg = input(">>>>> ")
18     conn.send(msg.encode('utf-8'))
19     if msg == 'bye':
20         break
21 
22 conn.close()
23 server.close()
# client
 1 import socket
 2 client = socket.socket()
 3 
 4 server_ip = ('127.0.0.1',8002)
 5 client.connect(server_ip)  # 連接目標
 6 
 7 while 1:
 8     # 發消息
 9     msg = input('>>>>> ')
10     client.send(msg.encode('utf-8'))  # 發送內容必須是bytes
11     if msg == 'bye':
12         break
13 
14     # 接消息
15     from_server_msg = client.recv(1024)  # 通過client接收,限制1024b
16     from_server_msg = from_server_msg.decode('utf-8')
17     print('來自少北的消息:',from_server_msg)
18     if from_server_msg == 'bye':
19         break
20 
21 client.close()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 網際網路聯繫的是世界各地的電腦(通過電纜),萬維網聯繫的是網上的各種各樣資源(通過文本超鏈接),如靜態的HTML文件,動態的軟體程式······。由於萬維網的存在,處於網際網路中的每台電腦可以很方便地進行消息交流、文件資源交流······。基於網際網路的幫助,我們可以在web客戶端(如瀏覽器等) ...
  • FileManager 圖片管理插件是 TinyMCE下 免費且非官方的文件插件,可上傳/管理的類型包括:文件,圖片,視頻。 本教程主要展示大叔在為安裝開發插件過程中進行調整的修改記錄。 ...
  • 昨天是感恩節,上幼兒園的女兒在老師的叮囑下,晚上為我和老婆洗了腳(形式上的^_^),還給我們每人端了一杯水。看著孩子一天天的長大,懂事,感覺很開心。話說咱們程式員這麼辛苦是為了什麼?不就是為了老婆,孩子,熱炕頭,有一個溫暖幸福的家庭,再捎帶著用代碼改變一下世界嗎?想到這裡,頓時覺得學習,創作博客的勁... ...
  • 有人說,你應該關註時事、財經,甚至流行的電影、電視劇,才有可能趁著熱點寫出爆文;有人說,你別再寫“無聊”的技術文了,因為程式員的圈子真的很小,即便是像鴻祥那樣的招牌大牛,文章是那麼的乾貨,瀏覽量有多少?不到萬吧;有人說,你別妄想在寫作上面知識變現了,因為你寫的文章真的很不優秀,我都不愛看! 我想說, ...
  • Django中每一個模型model都對應於資料庫中的一張表,每個模型中的欄位都對應於資料庫表的列。方便的是,django可以自動生成這些create table, alter table, drop table的操作。其次Django為咱們也提供了後臺管理模塊(Django-Admin),主要功能是 ...
  • 原地址:https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html ...
  • 1.網路通信協議 osi七層模型:按照分工不同把互聯網協議從邏輯上劃分了層級 socket層 2.理解socket: Socket是應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對 ...
  • 正常情況下,新激活的goroutine的結束過程是不可控制的,唯一可以保證終止goroutine的行為是main goroutine的終止。也就是說,我們並不知道哪個goroutine什麼時候結束。 但很多情況下,我們正需要知道goroutine是否完成。這需要藉助sync包的WaitGroup來實 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...