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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

web中网络编程详解

發布時間:2024/3/26 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web中网络编程详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天是冬至,不知道大家有沒有吃餃子啊!

每日分享:

冬至是北半球一年之中夜晚最長的一天,愿你在這個長夜能融化掉這一年所有的不快樂!!

目錄:

  • IP地址的介紹
  • 端口和端口號的介紹
  • TCP的介紹
  • socket的介紹
  • TCP網絡應用程序開發流程
  • TCP客戶端程序開發
  • TCP服務端程序開發
  • TCP網絡應用程序的注意點
  • socket中send和recv原理剖析
  • 一、IP地址的介紹

    1.IP地址的概念

    IP地址就是標識網絡設備(如電腦)的一個地址,就類似于家庭住址

    2.IP地址的表現形式

    ?說明:

    • IP地址分為兩類:IPv4和IPv6
    • IPv4是當前使用的ip地址
    • IPv6是未來使用的ip地址
    • ipv4是由點分割、十進制組成
    • ipv6是由冒號分割、十六進制組成

    3.ip地址的作用

    ip地址的作用是標識網絡中唯一的一臺設備,也就是通過ip地址能夠找到網絡中的某臺設備

    4.查看ip地址

    • linux和mac OS使用ifconfig命令
    • Windows使用ipconfig命令

    ?5.檢查網絡是否正常

    使用命令ping

    例:ping www.baidu.com?

    說明:

    • ping www.baidu.com檢查是否能上公網
    • ping 當前局域網的ip地址 檢查是否在同一個局域網內
    • ping 127.0.0.1 檢查本地網卡是否正常

    6.小結

    • ip地址的作用是標識網絡中唯一的一臺設備
    • ip地址的表現形式:ipv4、ipv6
    • 查看網卡信息:ipconfig
    • 檢查網絡:ping

    二、端口和端口號的介紹

    每運行一個網絡程序都會有一個端口,想要給對應的程序發送數據,找到對應的端口即可

    1. 什么是端口

    端口是傳輸數據的通道,就好比是教室的門,是數據的必經之路

    那么如何找到對應的端口?

    每一個端口都會有一個對應的端口號,就好比每一個教室的門都有一個門牌號,可以通過端口號來找到端口

    2. 什么是端口號

    操作系統為了統一管理這么多端口,就對端口進行了編號,這就是端口號,端口號其實就是一個數字,好比我們現實生活中的門牌號

    端口號共有65536(2的16次方)個:(0~65535

    數據通信流程:通過ip地址找到對應的設備,通過端口號找到對應的端口,然后通過端口把數據傳輸給應用程序

    3. 端口與端口號的關系

    端口號可以標識唯一的一個端口

    4. 端口號的分類

    • 知名端口號
    • 動態端口號

    知名端口號:

    知名端口號是指眾所周知的端口號,范圍:0~1023

    ? ? ? ? 這些端口號一般固定分配給一些服務,比如21端口號分配給FTP(文件傳輸協議)服務,25端口號分配給SMTP(簡單郵件傳輸協議)服務,80端口號分配給HTTP服務

    動態端口號:

    一般程序員開發應用程序使用端口號稱為動態端口號,范圍:1024~65535

    • 如果程序員開發的程序沒有設置端口號,操作系統會在動態端口號這個范圍內隨機生成一個給開發的應用程序使用
    • 當運行一個程序默認會有一個端口號,當這個程序退出時,所占用的這個端口號就會被釋放

    5. 小結

    • 端口的作用就是給運行的應用程序提供傳輸數據的通道
    • 端口號的作用就是用來區分和管理不同端口的,通過端口號能找到唯一的一個端口
    • 端口號可以分為兩類:知名端口號 和 動態端口號
      • 知名端口號的范圍:0~1023
      • 動態端口號的范圍:1024~65535

    三、TCP的介紹

    1. 網絡應用程序之間的通信流程

    通過ip地址能夠找到對應的設備,然后通過端口號找到對應的端口,在通過端口把數據傳輸給應用程序。但數據不能隨便發送,在發送之前還需要選擇一個對應的傳輸協議,保證程序之間按照指定的傳輸規則進行數據的通信,而這個傳輸協議就是我們今天學習的TCP

    2. TCP的概念

    TCP(Transmission Control Protocol)簡稱傳輸控制協議,它是一種面向連接的可靠的基于字節流的傳輸層通信協議

    TCP通信步驟:(類似于文件操作)

  • 創建連接
  • 傳輸數據
  • 關閉連接
  • 注意:

    TCP通信模型相當于生活中的‘打電話’,在通信之前,一定要先建立好連接,才能發送數據,通信結束要關閉連接

    3. TCP的特點

    • 面向連接
      • 通信雙方必須先建立好連接才能進行數據的傳輸,數據傳輸完成之后,雙方必須斷開此連接,以釋放系統資源
    • 可靠傳輸
      • TCP采用發送應答機制
      • 超時重傳
      • 錯誤校驗
      • 流量控制和阻塞管理

    4. 總結

    TCP是一個穩定、可靠的傳輸協議,常用于對數據進行準確無誤的傳輸,比如:文件下載、瀏覽器上網

    四、socket的介紹

    通信數據是通過socket來完成的

    1. socket的概念

    socket(套接字)是進程之間通信的一個工具,就好比生活中的插座,所有的家用電器要想工作都是基于插座進行的,進程之間想要通過網絡通信需要基于這個socket

    2. socket的作用

    負責進程之間的網絡數據傳輸,好比數據的搬運工

    3. socket使用場景

    和網絡相關的應用程序或軟件都使用到了socket

    4. 小結

    進程之間網絡數據的傳輸可以通過socket來完成,socket就是進程間網絡數據通信的工具

    五、網絡應用程序開發流程

    1. TCP網絡應用程序開發流程介紹

    TCP網絡應用程序開發分為:

    • TCP客戶端程序開發
    • TCP服務端程序開發

    說明:

    客戶端程序是指運行在用戶設備上的程序,服務端程序是指運行在服務器設備上的程序,專門為客戶端提供數據服務

    2. TCP客戶端程序開發流程的介紹

    步驟:

  • 創建客戶端套接字對象
  • 和服務端套接字建立連接
  • 發送數據
  • 接收數據
  • 關閉客戶端套接字
  • 3. TCP服務器端程序開發流程的介紹

    步驟:

  • 創建服務端套接字對象
  • 綁定端口號
  • 設置監聽
  • 等待接收客戶端的連接請求
  • 接收數據
  • 發送數據
  • 關閉套接字
  • 4. 小結

  • TCP網絡應用程序開發分為客戶端程序開發和服務端程序開發
  • 主動發起建立連接請求的是客戶端程序
  • 等待接收連接請求的是服務端程序
  • 六、TCP客戶端程序開發

    1. 開發TCP客戶端程序步驟

  • 創建客戶端套接字對象
  • 和服務端套接字建立連接
  • 發送數據
  • 接收數據
  • 關閉客戶端套接字
  • 2. socket類的介紹

    導入socket模塊:import socket

    創建客戶端socket對象:socket.socket(AddressFamily, Type)

    參數說明:

    • AddressFamily 表示ip地址類型,分為ipv4和ipv6
    • Type 表示傳輸協議類型

    方法說明:

    • connect((host,port))表示和服務器套接字建立連接,host是服務器ip地址,port是應用程序的端口號
    • send(data)表示發送數據,data是二進制數據
    • recv(buffersize)表示接收數據,buffersize是每次接收數據的最大長度

    3. TCP客戶端程序開發示例

    在這之前我們需要一個軟件:網絡調試助手(充當服務端)

    可以去網上搜索下載或者百度網盤提取鏈接:??????https://pan.baidu.com/s/1_lqcDOPI0n8zsPB6vx_JYw?
    提取碼:2fxa

    import socket if __name__ == '__main__':# 1.創建tcp客戶端套接字# AF_INET:ipv4 SOCK_STREAM:tcp傳輸協議tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.和服務端應用程序建立連接tcp_client_socket.connect(("127.0.0.1", 8080))# 3.準備發送的數據(win是gbk,linux是utf-8)send_data = "你好服務端,我是客戶端小白".encode('gbk')# 4.發送數據tcp_client_socket.send(send_data)# 5.接收數據,每次接收數據最大字節數是1024recv_data = tcp_client_socket.recv(1024)# 6.返回的是服務端程序發送的二進制數據print(recv_data)# 7.對數據進行解碼recv_content = recv_data.decode('gbk')print(recv_content)# 8.關閉套接字tcp_client_socket.close()

    運行后如下圖:

    可以看到py程序并沒有結束,它在等待服務器端返回給他數據:

    ?可以看到我們成功接收到了數據 “你好!”

    ?說明:

  • str.encode(編碼格式)表示把字符串編碼成為二進制
  • data.decode(編碼格式)表示把二進制解碼成為字符串
  • 其中網絡調試助手充當服務端程序:

    ?4. 小結

    1. 導入socket模塊

    2. 創建TCP套接字‘socket’

    • 參數1:‘AF_INET’,表示ipv4地址類型
    • 參數2:‘SOCK_STREAM’,表示TCP傳輸協議類型

    3. 發送數據‘send’

    • 參數1:要發送的二進制數據,字符串需要進行encode方法進行編碼

    4. 接收數據‘recv’

    • 參數1:表示每次接收數據最大為多少,單位:字節

    5. 關閉套接字‘socket’表示通信完成

    七、TCP服務端程序開發

    1. 服務端程序開發步驟

  • 創建服務端套接字對象
  • 綁定端口號
  • 設置監聽
  • 等待接受客戶端的連接請求
  • 接受數據
  • 發送數據
  • 關閉套接字
  • 2. socket類的介紹

    導入socket模塊

    import socket

    創建服務端socket對象

    socket.socket(AddressFamily, Type)

    參數說明:

    • AddressFamily表示IP地址類型,分為ipv4和ipv6
    • Type表示傳輸協議類型

    方法說明:

    • bind((host,port))表示綁定端口,host是ip地址,port是端口號,ip地址一般不指定,表示本機的任何一個ip地址都可以
    • listen(backing)表示設置監聽,backing參數表示最大等待建立連接的個數
    • accept()表示等待接收客戶端的連接請求
    • send(data)表示發送數據,data是二進制數據
    • recv(buffersize)表示接收數據,buffersize是每次接收數據的最大長度

    3. TCP服務端程序開發示例

    import socketif __name__ == '__main__':# 1.創建tcp服務端套接字# AF_INET:ipv4 AF_INET6:ipv6 SOCK_STREAM:tcp協議tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 設置端口號復用,程序退出,端口號立即釋放tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2.綁定端口號# 第一個參數表示ip地址,一般不用指定,表示本機的任何一個ip都可# 第二個參數表示端口號tcp_server_socket.bind(("", 8080))# 3.設置監聽# 128(可自定義)表示最大等待建立連接的個數tcp_server_socket.listen(128)# 4.等待接收客戶端的連接請求# 每次客戶端和服務端建立連接成功都會返回一個新的套接字# tcp_server_socket只負責等待接收客戶端的連接請求,收發消息不使用它new_client, ip_port = tcp_server_socket.accept()# 代碼執行至此表示連接成功print("客戶端的ip和端口號:", ip_port)# 5.接收客戶端的數據recv_data = new_client.recv(1024)# 對二進制數據進行解碼變成字符串recv_content = recv_data.decode('gbk')print("接收客戶端的數據:", recv_content)# 6.發送數據到客戶端send_content = '問題處理中...'# 二進制編碼send_data = send_content.encode('gbk')new_client.send(send_data)# 結束本次服務new_client.close()# 7.關閉服務端套接字,表示服務端以后不在接收等待接收客戶端的連接請求tcp_server_socket.close()

    結果:

    ?當客戶端和服務端建立連接之后,服務端程序退出后端口號不會立即釋放,需要大概等待1~2分鐘

    解決:

  • 更換服務端端口號
  • 設置端口號復用
  • 端口號復用代碼:

    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

    參數1:表示當前套接字

    參數2:設置端口號復用選項

    參數3:設置端口號復用選項對應的值

    在這,網絡調試助手充當客戶端程序

    ?4. 小結

    1. 導入socket模塊

    2. 創建TCP套接字‘socket’

    • 參數1:‘AF_INET’,表示ipv4地址類型
    • 參數2:‘SOCK_STREAM’,表示tcp傳輸協議類型

    3. 綁定端口號‘bind’

    • 參數:元組,(ip地址,端口號)

    4. 設置監聽‘listen’

    • 參數:元組,最大等待建立連接的個數

    5. 等待接收客戶端的連接請求‘accept’

    6. 發送數據‘send’

    • 參數:要發送的二進制數據,字符串需要用encode方法進行編碼

    7. 接收數據‘recv’

    • 參數:表示每次接收數據的最大的大小,單位是字節,解碼用decode方法

    8. 關閉套接字‘socket’表示通信完成

    八、TCP網絡應用程序的注意點

  • 當TCP客戶端程序想要和TCP服務端程序進行通信的時候必須要先建立連接
  • TCP客戶端程序一般不需要綁定端口號,因為客戶端是主動發起建立連接的
  • TCP服務端程序必須綁定端口號,否則客戶端找不到這個TCP服務端程序
  • listen之后,之前的套接字就成了被動套接字,只負責接收新的客戶端的連接請求,不能收發消息
  • 當TCP客戶端程序和TCP服務端程序連接成功后,TCP服務端程序會產生一個新的套接字,收發客戶端消息使用該套接字
  • 關閉accept返回的套接字意味著和這個客戶端通信完畢
  • listen后,關閉之前的套接字意味著服務端的套接字關閉了,會導致新的客戶端不能連接服務端,但是之前已經連接成功的客戶端還能正常通信
  • 當客戶端的套接字調用close后,服務器的recv會解阻塞,返回的數據長度為0,服務端可以通過返回數據的長度來判斷客戶端是否已經下線,反之服務端關閉套接字,客戶端的recv也會解阻塞,返回的數據長度也為0
  • 九、socket中send和recv原理剖析

    1. 認識TCP socket的發送和接收緩沖區

    當創建一個TCP socket對象的時候,會有一個發送緩沖區和一個接收緩沖區這個發送和接收緩沖區指的就是內存中的一片空間

    2. send原理剖析

    send是不是直接把數據發送給服務端?

    不是,想要發送數據,必須得通過網卡發送數據,應用程序是無法直接通過網卡發送數據的,它需要調用操作系統接口,也就是說,應用程序把發送的數據先寫入到發送緩沖區(內存中的一片空間),再由操作系統控制網卡把發送緩沖區的數據發送給服務端網卡

    3. recv原理剖析

    recv是不是直接從客戶端接收數據?

    不是,應用軟件是無法直接通過網卡接收數據的,它需要調用操作系統接口,由操作系統通過網卡接收數據,把接收的數據寫入到接收緩沖區(內存中的一片空間),應用程序再從接收緩沖區獲取客戶端發送的數據

    4. send和recv原理剖析圖

    ?說明:

    • 發送數據是發送到發送緩沖區
    • 接收數據是從接收緩沖區獲取

    5. 小結

    不管是recv還是send都不是直接接收到對方的數據和發送數據到對方,發送數據會寫入到發送緩沖區,接收數據是從接收緩沖區來讀取,發送數據和接收數據最終是由操作系統控制網卡來完成

    總結

    以上是生活随笔為你收集整理的web中网络编程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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