python传输服务之TCP,UDP协议传输

面向连接传输服务 ——–> tcp协议

传输特征:

  1. 提供可靠的传输服务:
    可靠性表现:数据传输过程中,无失序,无差错,无重复,无丢失
    传输过程中有建立和断开连接的过程

三次握手:建立数据传输两端的持续连接

1.客户端先服务器发起连接请求
2.服务器收到请求以后进行确认,返回报文
3.客户端收到服务器确认进行连接

四次挥手:断开连接的两端,保证跑数据的完整性

1.主动方发送报文,告知被动方要断开连接
2.被动方返回报文,告知收到请求,准备断开
3.被动方再次发送报文告知准备完毕可以准备断开
4.主动方发送完成断开

适用情况:

文件的上传下载,网络情况良好,必须保证可靠性的情况
比如:信息聊天,文件上传下载,邮件,网页获取

面向无连接传输服务 ———–> udp协议

传输特征:

不保证传输的可靠性
无需建立三次握手和四次挥手的连接断开
消息的收发比较自由,不受其他约束

适用情况:

网络情况较差,对可靠性要求不高,收发信息的两端不适和建立固定连接
比如:网络视频,群聊,发送广播

socket套接字编程

目的:

通过编程语言提供的函数接口进行组合,更简单的完成基于tcp和udp通信的网络编程
套接字:完成上述目标的编程方法方案
套接字的分类:
流式套接字(SOCK_STREAM):传输层基于tcp的协议进行通信
面向连接的可靠的传输 tcp传输 流式套接字
数据报套接字(SOCK_DGRAM):传输层基于udp协议经行通信
面向无连接的不可靠套接字 udp传输 数据报套接字

底层套接字(SOCK_RAM):访问底层协议的套接字

Tcp套接字服务端创建流程

import socket

1.创建套接字

socket.socket(socket_family = AF_INET,
socket_type = SOCK_STREAM,
proto = 0)
功能:创建一个套接字
参数:socket_family 地址族类型 AF_INET 表示IPv4网络通信
socket_type 套接字类型 SOCK_STREAM 流式
SOCK_DGRAM 数据报
proto 通常为0

2.绑定ip端口

sockfd.bind()
功能:绑定ip和端口
参数:二元组,第一项为可用的ip 第二项为端口号(IP,port)
eg:(“192.168.1.2,” 80)

3.将套接字设置为可监听

sockfd.listen(n)
功能:将套接字设置为监听套接字,并设置监听队列
参数:监听对象的大小 n为大于0的正整数
*一个监听套接字可以连接多个客户端

4.等待客户端的连接

connfd,addr = sockfd.accept()
功能:阻塞等待客户端连接
返回值:connfd 一个新的套接字,用于和指定客户进行通信
addr:连接的客户端的地址 (ip,port)
*阻塞函数:程序运行到阻塞函数位置,如果某种条件没有达到
则暂停继续运行,直到条件达成以后再继续运行

5.消息的收发

data = connfd,recv(buffersize)
功能:接收消息
参数:每次最多接受的消息的大小 bytes
返回值:返回接受到的内容
n = connfd.send(data)
功能:发送消息
参数:要要发送的内容 必须是bytes格式
返回值:实际发送的字节

6.关闭套接字

sockfd.close()
功能:关闭套接字,tcp连接断开

  • telnet ip port 表示连接tcp服务端

tcp客户端创建流程

1.创建套接字

socket()
*通信的两端套接字的类型相同

2.发起连接

connect()
功能:发起连接请求
参数:元组,服务器端的地址

3.发收消息

send recv
*两端收发需要配合

4.关闭套接字

close()

基于udp的通信服务端

1.创建套接字 ——> 数据报套接字

sockfd = socket(AF_INIT,SOCK_DGRAM)

2.绑定服务端地址

sockfd.bind()

3.消息的收发

data,addr = recvfrom(buffersize)
功能:接受udp消息
参数:每次最多接受消息的大小
返回值:data 接收到的消息
addr 消息发送者的地址
*recvfrom每次接收一个报文如果没有接受完全则丢弃
sendto(data,addr)
功能:udp发送消息
参数:data要发送的消息 bytes
addr 目标地址
返回值:发送的字节

4.关闭套接字

sochfd.close()

cookie
sys.argv
功能:获取来自命令行的参数,形成一个列表
*以空格作为每一项分隔,如果一项中有空格则用引号表示一个整体
*命令行内容均作为字符串传入

udp客户端流程

1.创建套接字

2.消息收发

3.关闭套接字

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值