0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python-网络编程

汽车电子技术 来源:程序猿知秋 作者: 程序猿知秋 2023-02-16 15:45 次阅读

网络通信基本概述

  • 网络是什么?
    • 网络就是辅助双方或多方连接在一起的工具
  • 使用网络的目的?
    • 使连接网络的多方,能进行数据传递
  • 网络编程是什么?
    • 就是让在不同电脑上的软件能进行数据传递
  • IP地址是什么?
    • 用来在网络中标记一台电脑,比如:192.168.1.1;在本地局域网内是唯一的
  • 查看本机ip地址
    • 在dos命令窗口中,输入:ipconfig
    • 图片
  • 什么是端口
    • 端口是通过端口号来标记的,范围是从 0~65535
    • 知名端口
      • 众所周知的端口号,范围 0~1023,例如:80端口是http的,21端口是ftp用的
      • 一般情况下,程序要使用知名端口是需要管理员权限的
    • 动态端口
      • 动态端口一般不固定,是动态分配的,范围从 1024~65535
      • 动态分配是指,当一个程序需要网络通信时,它向主机申请一个端口,主机从可用的端口中分配一个供它使用,当这个程序关闭时,同时会释放占用的端口
    • 可以在命令窗口中输入:** netstat -ano **查看端口状态

socket概述

  • 什么是socket?
    • socket 简称 套接字 ,是进程间通信的一种方式,它与其它进程间通信的一个主要不同是:它能实现不同主机间的通信,例如:QQ、微信等
  • Python中,使用socket 模块的函数 socket 来创建通信

语法

import socket
socket.socket(family,type)

参数说明

  • **family: **可以选择 AF_INET(用于Internet 进程间通信) 或者 AF_UNIX (用于另一台机器进程间通信),实际工作中常用AF_INET
  • Type: 套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议) 或者 SOCK_DGRAM(数据报套接字,主要用于UDP协议)

**说明

**

  • 套接字使用流程与文件使用流程类似
    • 创建套接字
    • 使用套接字收/发数据
    • 关闭套接字

示例

import socket
# 创建TCP的套接字 (点对点)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# 发送或者接收信息 ...


# 关闭套接字
s.close()


# 创建UDP的套接字 (一对多,广播形式)
s2=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


# 发送或者接收信息 ...


# 关闭套接字
s2.close()

UDP协议

  • 介绍
    • 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议
    • UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送
  • 优点
    • 传输速度快
    • 有效传输的数据量最多为500bytes
  • 缺点
  • 发送数据,无需对方确认(不可靠)
  • 容易丢包
  • 应用场景
    • UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议
    • 在局域网中,如果要想局域网内所有计算机发送数据,可以使用广播,广播不能用TCP实现,可以用UDP实现

**示例

**

**客户端

**

import socket


# 创建UDP的套接字
udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#  允许套接口传送广播信息,当option_value不等于0时,允许,否则,禁止
udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)


port=33333
# ip 为广播形式,也可以用255.255.255.25 表示全局域网都可以接收
network=''
# 发送广播数据
udpSocket.sendto("我在发送数据!!".encode("utf-8"),(network,port))


# 关闭
udpSocket.close()

服务端

import socket


# 创建UDP的套接字
udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#  允许套接口传送广播信息
udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)


port=33333
# 绑定ip和端口,本机ip可以不写
udpSocket.bind(('',port))


# 等待接收方发送数据,1024表示本次接收的最大字节数
data,address=udpSocket.recvfrom(1024)
print("接收到的数据是:%s,地址是:%s"%(data.decode("utf-8"),str(address)))


# 关闭
udpSocket.close()

TCP协议

  • 介绍
    • TCP协议,是一种传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层控制协议,由IETF的RFC 793定义
    • TCP是一种点对点的传输方式
    • TCP协议编写的三个步骤:创建连接、数据传递、关闭连接
    • TCP 通信模型中,在通信开始之前,一定要先建立相关的连接,才能发送数据
  • 优点
    • 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接
    • 在数据传递时,有确认、重传、拥塞控制机制
    • 在数据传完后,会断开连接用来节约系统资源
  • 缺点
    • 慢,效率低,占用系统资源高
    • 易被攻击,TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击

TCP与UDP的区别

  • 面向连接
    • TCP面向连接(如打电话要先拨号建立连接)
    • UDP是无连接的,即发送数据之前不需要建立连接
  • 可靠
    • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
    • UDP尽最大努力交付,不需要对方确认,即不保证可靠交付
  • 字节流
    • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流
    • UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 连接性
    • TCP连接只能是点到点的
    • UDP支持一对一,一对多,多对一和多对多的交互通信
  • 首部开销
    • TCP首部开销20字节
    • UDP首部开销小,只有8个字节
  • 信道
    • TCP的逻辑通信信道是全双工的可靠信道
    • UDP则是不可靠信道

示例

服务端

import socket


# 创建tcp 的套接字
tcp_socekt=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# ip与端口,本机ip可以不写
addr=('',44444)
# 绑定地址
tcp_socekt.bind(addr)


# 使用socket创建的套接字默认的属性是 主动的,使用 listen 将其变为被动,这样就可以接收别人的连接了, 128表示允许的最大连接数
tcp_socekt.listen(128)


# 如果有一个新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_socket 用来为这个客户端服务
# tcp_socket 就可以用来专门等待其他新客户端的链接
client_socket,client_addr=tcp_socekt.accept()


# 接收对方发过来的数据
data=client_socket.recv(1024)
print("接收到的数据是:%s,地址是:%s"%(data.decode("utf-8"),str(client_addr)))


# 发送数据到客户端
client_socket.send("hello....".encode("utf-8"))


# 关闭为这个客户端服务的套接字,一旦关闭,就意味着不能再为这个客户端服务了
client_socket.close()


# 关闭外面总的 套接字,一旦关闭,则意味着不再接收任何连接了
tcp_socekt.close()

客户端

import socket


# 创建tcp 套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# 目标服务器地址
dest_addr=("127.0.0.1",44444)


# 连接目标服务器
tcp_socket.connect(dest_addr)


# 发送数据
tcp_socket.send("我是客户端".encode("utf-8"))


# 接收对方发过来的数据,最大接收1024个字节
data=tcp_socket.recv(1024)
print("接收到的数据是:%s"%data.decode("utf-8"))


# 关闭套接字
tcp_socket.close()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络
    +关注

    关注

    14

    文章

    7251

    浏览量

    87447
  • 工具
    +关注

    关注

    3

    文章

    306

    浏览量

    27436
  • 辅助
    +关注

    关注

    0

    文章

    8

    浏览量

    10504
收藏 人收藏

    评论

    相关推荐

    Labview与Python网络编程

    Labview素有测试之王的美誉,图形化编程和快速搭建自动化平台让人爱不释手。但是Labview不能在安卓平台上运行,开发web也力不从心。如果labview配合上Python简直就如虎添翼了
    发表于 11-12 13:48

    Python学习之网络编程Socket分享

    Python学习之网络编程Socket
    发表于 07-02 08:18

    请问python-树莓派如何通过按键控制步进电机正反转?

    步进电机驱动原理是什么?python-树莓派如何通过按键控制步进电机正反转?
    发表于 10-09 08:45

    python-控制khr3hv-master机器人

    python-控制khr3hv机器人,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-22 15:40 2次下载

    设计多网络协议的Python网络编程的探索性指南

    很高兴看到本书出版了,我要感谢所有为本书的出版做出贡献的人。本书是Python网络编程方面的探索性指南,涉及了很多网络协议
    发表于 09-14 10:47 5次下载

    python-速成指南

    python 提供好用的两个容器:list 和 dict。插句题外话,其实最好用的容器还是 PHP 提供的关联数组,一个数组就包括了 python 中 list 和 dict 的全部功能,实在是很赞。
    发表于 03-28 16:32 9次下载

    Python的良好编程习惯

    Python的良好编程习惯分享。
    发表于 05-28 10:11 8次下载

    Python网络编程基础

    Python网络编程基础知识免费下载。
    发表于 06-01 14:29 23次下载

    Python编程入门》.pdf

    Python编程入门》.pdf
    发表于 02-11 16:03 0次下载

    Python学习科学编程

    Python学习科学编程Python经典教材。
    发表于 03-09 15:00 0次下载

    Python-模块与包

    模块是Python 程序架构的一个核心概念
    的头像 发表于 02-16 14:55 550次阅读
    <b class='flag-5'>Python-</b>模块与包

    Python-字典

    dictionary (字典) **是除列表外** Python **中,最灵活的数据类型
    的头像 发表于 02-16 15:02 433次阅读
    <b class='flag-5'>Python-</b>字典

    Python-字符串

    字符串就是 一串字符 ,是编程语言中表示文本的数据类型,在Python中使用一对双引号 "" 或者一对单引号来定义.
    的头像 发表于 02-16 15:05 644次阅读
    <b class='flag-5'>Python-</b>字符串

    如何搭建Python编程环境

    Python是一种高级编程语言,被广泛用于科学计算、数据分析、人工智能、Web开发等领域。想要学习Python编程,首先需要搭建一个合适的编程
    的头像 发表于 04-14 12:07 4514次阅读

    网络工程师学Python-继承概念介绍

    Python 中,继承是一种重要的面向对象编程概念。通过继承,我们可以定义一个新的类,它继承了现有类的属性和方法。
    的头像 发表于 04-20 16:56 316次阅读