网络通信基本概述
- 网络是什么?
- 网络就是辅助双方或多方连接在一起的工具
- 使用网络的目的?
- 使连接网络的多方,能进行数据传递
- 网络编程是什么?
- 就是让在不同电脑上的软件能进行数据传递
- 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文章
7496浏览量
88590 -
工具
+关注
关注
4文章
307浏览量
27719 -
辅助
+关注
关注
0文章
8浏览量
10514
发布评论请先 登录
相关推荐
Labview与Python的网络编程
Labview素有测试之王的美誉,图形化编程和快速搭建自动化平台让人爱不释手。但是Labview不能在安卓平台上运行,开发web也力不从心。如果labview配合上Python简直就如虎添翼了
发表于 11-12 13:48
设计多网络协议的Python网络编程的探索性指南
很高兴看到本书出版了,我要感谢所有为本书的出版做出贡献的人。本书是Python网络编程方面的探索性指南,涉及了很多网络协议
发表于 09-14 10:47
•5次下载
python-速成指南
python 提供好用的两个容器:list 和 dict。插句题外话,其实最好用的容器还是 PHP 提供的关联数组,一个数组就包括了 python 中 list 和 dict 的全部功能,实在是很赞。
发表于 03-28 16:32
•9次下载
如何搭建Python编程环境
Python是一种高级编程语言,被广泛用于科学计算、数据分析、人工智能、Web开发等领域。想要学习Python编程,首先需要搭建一个合适的编程
如何使用Python进行神经网络编程
。 为什么使用Python? Python是一种广泛使用的高级编程语言,以其易读性和易用性而闻名。Python拥有强大的库,如TensorFlow、Keras和PyTorch,这些库提
Python编程:处理网络请求的代理技术
在网络编程中,代理技术扮演着至关重要的角色,尤其在处理网络请求时。通过代理服务器,我们可以实现请求的转发、缓存、负载均衡以及安全控制等功能。Python作为一种功能强大的
评论