吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python-網(wǎng)絡(luò)編程

汽車電子技術(shù) ? 來源:程序猿知秋 ? 作者: 程序猿知秋 ? 2023-02-16 15:45 ? 次閱讀

網(wǎng)絡(luò)通信基本概述

  • 網(wǎng)絡(luò)是什么?
    • 網(wǎng)絡(luò)就是輔助雙方或多方連接在一起的工具
  • 使用網(wǎng)絡(luò)的目的?
    • 使連接網(wǎng)絡(luò)的多方,能進(jìn)行數(shù)據(jù)傳遞
  • 網(wǎng)絡(luò)編程是什么?
    • 就是讓在不同電腦上的軟件能進(jìn)行數(shù)據(jù)傳遞
  • IP地址是什么?
    • 用來在網(wǎng)絡(luò)中標(biāo)記一臺電腦,比如:192.168.1.1;在本地局域網(wǎng)內(nèi)是唯一的
  • 查看本機(jī)ip地址
    • 在dos命令窗口中,輸入:ipconfig
    • 圖片
  • 什么是端口
    • 端口是通過端口號來標(biāo)記的,范圍是從 0~65535
    • 知名端口
      • 眾所周知的端口號,范圍 0~1023,例如:80端口是http的,21端口是ftp用的
      • 一般情況下,程序要使用知名端口是需要管理員權(quán)限的
    • 動態(tài)端口
      • 動態(tài)端口一般不固定,是動態(tài)分配的,范圍從 1024~65535
      • 動態(tài)分配是指,當(dāng)一個(gè)程序需要網(wǎng)絡(luò)通信時(shí),它向主機(jī)申請一個(gè)端口,主機(jī)從可用的端口中分配一個(gè)供它使用,當(dāng)這個(gè)程序關(guān)閉時(shí),同時(shí)會釋放占用的端口
    • 可以在命令窗口中輸入:** netstat -ano **查看端口狀態(tài)

socket概述

  • 什么是socket?
    • socket 簡稱 套接字 ,是進(jìn)程間通信的一種方式,它與其它進(jìn)程間通信的一個(gè)主要不同是:它能實(shí)現(xiàn)不同主機(jī)間的通信,例如:QQ、微信等
  • Python中,使用socket 模塊的函數(shù) socket 來創(chuàng)建通信

語法

import socket
socket.socket(family,type)

參數(shù)說明

  • **family: **可以選擇 AF_INET(用于Internet 進(jìn)程間通信) 或者 AF_UNIX (用于另一臺機(jī)器進(jìn)程間通信),實(shí)際工作中常用AF_INET
  • Type: 套接字類型,可以是SOCK_STREAM(流式套接字,主要用于TCP協(xié)議) 或者 SOCK_DGRAM(數(shù)據(jù)報(bào)套接字,主要用于UDP協(xié)議)

**說明

**

  • 套接字使用流程與文件使用流程類似
    • 創(chuàng)建套接字
    • 使用套接字收/發(fā)數(shù)據(jù)
    • 關(guān)閉套接字

示例

import socket
# 創(chuàng)建TCP的套接字 (點(diǎn)對點(diǎn))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# 發(fā)送或者接收信息 ...


# 關(guān)閉套接字
s.close()


# 創(chuàng)建UDP的套接字 (一對多,廣播形式)
s2=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


# 發(fā)送或者接收信息 ...


# 關(guān)閉套接字
s2.close()

UDP協(xié)議

  • 介紹
    • 用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)無連接的簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議
    • UDP數(shù)據(jù)包括目的端口號和源端口號信息,由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送
  • 優(yōu)點(diǎn)
    • 傳輸速度快
    • 有效傳輸?shù)臄?shù)據(jù)量最多為500bytes
  • 缺點(diǎn)
  • 發(fā)送數(shù)據(jù),無需對方確認(rèn)(不可靠)
  • 容易丟包
  • 應(yīng)用場景
    • UDP廣泛應(yīng)用于需要相互傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用中,如QQ使用的就是UDP協(xié)議
    • 在局域網(wǎng)中,如果要想局域網(wǎng)內(nèi)所有計(jì)算機(jī)發(fā)送數(shù)據(jù),可以使用廣播,廣播不能用TCP實(shí)現(xiàn),可以用UDP實(shí)現(xiàn)

**示例

**

**客戶端

**

import socket


# 創(chuàng)建UDP的套接字
udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#  允許套接口傳送廣播信息,當(dāng)option_value不等于0時(shí),允許,否則,禁止
udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)


port=33333
# ip 為廣播形式,也可以用255.255.255.25 表示全局域網(wǎng)都可以接收
network=''
# 發(fā)送廣播數(shù)據(jù)
udpSocket.sendto("我在發(fā)送數(shù)據(jù)!!".encode("utf-8"),(network,port))


# 關(guān)閉
udpSocket.close()

服務(wù)端

import socket


# 創(chuàng)建UDP的套接字
udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#  允許套接口傳送廣播信息
udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)


port=33333
# 綁定ip和端口,本機(jī)ip可以不寫
udpSocket.bind(('',port))


# 等待接收方發(fā)送數(shù)據(jù),1024表示本次接收的最大字節(jié)數(shù)
data,address=udpSocket.recvfrom(1024)
print("接收到的數(shù)據(jù)是:%s,地址是:%s"%(data.decode("utf-8"),str(address)))


# 關(guān)閉
udpSocket.close()

TCP協(xié)議

  • 介紹
    • TCP協(xié)議,是一種傳輸控制協(xié)議,是一種面向連接的,可靠的,基于字節(jié)流的傳輸層控制協(xié)議,由IETF的RFC 793定義
    • TCP是一種點(diǎn)對點(diǎn)的傳輸方式
    • TCP協(xié)議編寫的三個(gè)步驟:創(chuàng)建連接、數(shù)據(jù)傳遞、關(guān)閉連接
    • TCP 通信模型中,在通信開始之前,一定要先建立相關(guān)的連接,才能發(fā)送數(shù)據(jù)
  • 優(yōu)點(diǎn)
    • 可靠,穩(wěn)定 TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前,會有三次握手來建立連接
    • 在數(shù)據(jù)傳遞時(shí),有確認(rèn)、重傳、擁塞控制機(jī)制
    • 在數(shù)據(jù)傳完后,會斷開連接用來節(jié)約系統(tǒng)資源
  • 缺點(diǎn)
    • 慢,效率低,占用系統(tǒng)資源高
    • 易被攻擊,TCP有確認(rèn)機(jī)制、三次握手機(jī)制,這些也導(dǎo)致TCP容易被人利用,實(shí)現(xiàn)DOS、DDOS、CC等攻擊

TCP與UDP的區(qū)別

  • 面向連接
    • TCP面向連接(如打電話要先撥號建立連接)
    • UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
  • 可靠
    • TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá)
    • UDP盡最大努力交付,不需要對方確認(rèn),即不保證可靠交付
  • 字節(jié)流
    • TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流
    • UDP是面向報(bào)文的,UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機(jī)的發(fā)送速率降低(對實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會議等)
  • 連接性
    • TCP連接只能是點(diǎn)到點(diǎn)的
    • UDP支持一對一,一對多,多對一和多對多的交互通信
  • 首部開銷
    • TCP首部開銷20字節(jié)
    • UDP首部開銷小,只有8個(gè)字節(jié)
  • 信道
    • TCP的邏輯通信信道是全雙工的可靠信道
    • UDP則是不可靠信道

示例

服務(wù)端

import socket


# 創(chuàng)建tcp 的套接字
tcp_socekt=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# ip與端口,本機(jī)ip可以不寫
addr=('',44444)
# 綁定地址
tcp_socekt.bind(addr)


# 使用socket創(chuàng)建的套接字默認(rèn)的屬性是 主動的,使用 listen 將其變?yōu)楸粍樱@樣就可以接收別人的連接了, 128表示允許的最大連接數(shù)
tcp_socekt.listen(128)


# 如果有一個(gè)新的客戶端來連接服務(wù)器,那么就產(chǎn)生一個(gè)新的套接字專門為這個(gè)客戶端服務(wù)
# client_socket 用來為這個(gè)客戶端服務(wù)
# tcp_socket 就可以用來專門等待其他新客戶端的鏈接
client_socket,client_addr=tcp_socekt.accept()


# 接收對方發(fā)過來的數(shù)據(jù)
data=client_socket.recv(1024)
print("接收到的數(shù)據(jù)是:%s,地址是:%s"%(data.decode("utf-8"),str(client_addr)))


# 發(fā)送數(shù)據(jù)到客戶端
client_socket.send("hello....".encode("utf-8"))


# 關(guān)閉為這個(gè)客戶端服務(wù)的套接字,一旦關(guān)閉,就意味著不能再為這個(gè)客戶端服務(wù)了
client_socket.close()


# 關(guān)閉外面總的 套接字,一旦關(guān)閉,則意味著不再接收任何連接了
tcp_socekt.close()

客戶端

import socket


# 創(chuàng)建tcp 套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# 目標(biāo)服務(wù)器地址
dest_addr=("127.0.0.1",44444)


# 連接目標(biāo)服務(wù)器
tcp_socket.connect(dest_addr)


# 發(fā)送數(shù)據(jù)
tcp_socket.send("我是客戶端".encode("utf-8"))


# 接收對方發(fā)過來的數(shù)據(jù),最大接收1024個(gè)字節(jié)
data=tcp_socket.recv(1024)
print("接收到的數(shù)據(jù)是:%s"%data.decode("utf-8"))


# 關(guān)閉套接字
tcp_socket.close()
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7599

    瀏覽量

    89249
  • 工具
    +關(guān)注

    關(guān)注

    4

    文章

    314

    瀏覽量

    27911
  • 輔助
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    10530
收藏 人收藏

    評論

    相關(guān)推薦

    Labview與Python網(wǎng)絡(luò)編程

    Labview素有測試之王的美譽(yù),圖形化編程和快速搭建自動化平臺讓人愛不釋手。但是Labview不能在安卓平臺上運(yùn)行,開發(fā)web也力不從心。如果labview配合上Python簡直就如虎添翼了
    發(fā)表于 11-12 13:48

    Python學(xué)習(xí)之網(wǎng)絡(luò)編程Socket分享

    Python學(xué)習(xí)之網(wǎng)絡(luò)編程Socket
    發(fā)表于 07-02 08:18

    請問python-樹莓派如何通過按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)?

    步進(jìn)電機(jī)驅(qū)動原理是什么?python-樹莓派如何通過按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)?
    發(fā)表于 10-09 08:45

    python-控制khr3hv-master機(jī)器人

    python-控制khr3hv機(jī)器人,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-22 15:40 ?2次下載

    設(shè)計(jì)多網(wǎng)絡(luò)協(xié)議的Python網(wǎng)絡(luò)編程的探索性指南

    很高興看到本書出版了,我要感謝所有為本書的出版做出貢獻(xiàn)的人。本書是Python網(wǎng)絡(luò)編程方面的探索性指南,涉及了很多網(wǎng)絡(luò)協(xié)議
    發(fā)表于 09-14 10:47 ?5次下載

    python-速成指南

    python 提供好用的兩個(gè)容器:list 和 dict。插句題外話,其實(shí)最好用的容器還是 PHP 提供的關(guān)聯(lián)數(shù)組,一個(gè)數(shù)組就包括了 python 中 list 和 dict 的全部功能,實(shí)在是很贊。
    發(fā)表于 03-28 16:32 ?9次下載

    Python網(wǎng)絡(luò)編程基礎(chǔ)

    Python網(wǎng)絡(luò)編程基礎(chǔ)知識免費(fèi)下載。
    發(fā)表于 06-01 14:29 ?23次下載

    Python編程入門》.pdf

    Python編程入門》.pdf
    發(fā)表于 02-11 16:03 ?0次下載

    Python-模塊與包

    模塊是Python 程序架構(gòu)的一個(gè)核心概念
    的頭像 發(fā)表于 02-16 14:55 ?819次閱讀
    <b class='flag-5'>Python-</b>模塊與包

    Python-字典

    dictionary (字典) **是除列表外** Python **中,最靈活的數(shù)據(jù)類型
    的頭像 發(fā)表于 02-16 15:02 ?671次閱讀
    <b class='flag-5'>Python-</b>字典

    Python-字符串

    字符串就是 一串字符 ,是編程語言中表示文本的數(shù)據(jù)類型,在Python中使用一對雙引號 "" 或者一對單引號來定義.
    的頭像 發(fā)表于 02-16 15:05 ?1221次閱讀
    <b class='flag-5'>Python-</b>字符串

    如何搭建Python編程環(huán)境

    Python是一種高級編程語言,被廣泛用于科學(xué)計(jì)算、數(shù)據(jù)分析、人工智能、Web開發(fā)等領(lǐng)域。想要學(xué)習(xí)Python編程,首先需要搭建一個(gè)合適的編程
    的頭像 發(fā)表于 04-14 12:07 ?5261次閱讀

    網(wǎng)絡(luò)工程師學(xué)Python-遠(yuǎn)程連接管理Telnet

    Python Telnet是一種用于遠(yuǎn)程連接和管理網(wǎng)絡(luò)設(shè)備的Python庫。
    的頭像 發(fā)表于 04-28 09:47 ?999次閱讀

    如何使用Python進(jìn)行神經(jīng)網(wǎng)絡(luò)編程

    。 為什么使用PythonPython是一種廣泛使用的高級編程語言,以其易讀性和易用性而聞名。Python擁有強(qiáng)大的庫,如TensorFlow、Keras和PyTorch,這些庫提
    的頭像 發(fā)表于 07-02 09:58 ?452次閱讀

    Python編程:處理網(wǎng)絡(luò)請求的代理技術(shù)

    網(wǎng)絡(luò)編程中,代理技術(shù)扮演著至關(guān)重要的角色,尤其在處理網(wǎng)絡(luò)請求時(shí)。通過代理服務(wù)器,我們可以實(shí)現(xiàn)請求的轉(zhuǎn)發(fā)、緩存、負(fù)載均衡以及安全控制等功能。Python作為一種功能強(qiáng)大的
    的頭像 發(fā)表于 11-12 07:23 ?228次閱讀
    来凤县| 百家乐大眼仔用法| 德州扑克发牌员| 米其林百家乐官网的玩法技巧和规则| 大发888zhldu| 罗盘24山作用| 尊龙备用网站| 澳门百家乐怎玩| 噢门百家乐官网玩的技巧| 威尼斯人娱乐城博彩投注平台| 奔驰百家乐官网游戏电玩| 大发888娱乐城出纳柜台| 杨公先师24山秘密全书| 宜君县| 真人百家乐娱乐场开户注册| 百家乐官网优博u2bet| 威尼斯人娱乐城首选大丰收| 贵宾百家乐官网的玩法技巧和规则| 德州扑克大小| 百家乐官网网上玩法| 德州扑克 教学| 百家乐真人百家乐皇冠开户| 太阳城百家乐官网客户端| 大发888官方网址| 百家乐官网套路| 大发888的促销代码| 百家乐打连技巧| 金贊娱乐城| 百家乐代理打| 罗马百家乐官网的玩法技巧和规则 | 金三角百家乐的玩法技巧和规则| 百家乐官网永利娱乐| 二八杠口诀| 新东方百家乐的玩法技巧和规则| 杨公24山择日| 澳门百家乐官网视频| 大发888娱乐城888 bg| 诚信百家乐平台| 百家乐官网三路法| 百家乐官网棋牌公式| 大发888df登录|