欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python笔记28(TCP,UDP,socket协议)

程序员文章站 2022-05-04 14:43:43
今日内容 1、TCP协议 协议的特点:三次握手,四次挥手; 2、UDP协议 3、OSI七层模型:每层的物理设备,每一层协议。 4、代码部分: ①介绍socket; ②使用socket完成tcp协议的web通信; ③使用socket完成udp协议的web通信。 1、TCP协议 2、UDP协议 3、OS ......

今日内容

1、tcp协议

协议的特点:三次握手,四次挥手;

2、udp协议

3、osi七层模型:每层的物理设备,每一层协议。

4、代码部分:

①介绍socket;

②使用socket完成tcp协议的web通信;

③使用socket完成udp协议的web通信。

1、tcp协议

1、可靠,慢,全双工通信
2、建立连接的时候,三次握手
3、断开连接的时候,四次挥手
4、在建立起连接后
发送的每条信息都有回执
为了保证数据的完整性,还有重传机制
5、长连接:会一直占用双方的端口
6、i/o操作(input,output),输入输出相对内存来说的。
    write,send:输出 output
    read,recv:输入input
 能够传输的数据没有限制

2、udp协议

1、无连接的,速度快
2、可能会丢消息
能够传输的数据长度有限的,是根据数据传输设备设置有关(mtu)
应用场景:
tcp:文件的上传,下载(邮件,网盘,缓存电影)
udp:即时通信(qq,微信)

3、osi7层模型

应用层 :http,https,ftp,smtp
表示层
会话层
#应用层(开发角度,五层协议)--》代码
传输层,tcp,udp
网络层,ipv4,ipv6 (路由器)
数据链路层,mac,arp(网卡,交换机)
物理层

4、抽象层

socket  中文名:套接字
python socket模块 完成socket的功能
工作在应用层和传输层 之间的抽象层
    帮助我们完成了所有信息的组织和拼接
socket对于程序员来说,已经是网络操作的底层了。
socket历史
    同一台机器上的两个服务之间的通信
        基于文件
    基于网络的多态机器之间的多个服务通信
tcp协议:
###########
server端:

import socket
sk=socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
print('*'*20)
conn,addr=sk.accept()
while true:
    msg=conn.recv(1024).decode('utf-8')
    if msg.upper()=='q':break
    print(msg)
    ipn=input(">>>")
    conn.send(ipn.encode('utf-8'))
    if ipn.upper()=='q':break
conn.close()
sk.close()

################
client端:
import socket

sk=socket.socket()
sk.connect(('127.0.0.1',9000))
while true:
    ipn=input(">>>")
    sk.send(ipn.encode('utf-8'))
    if ipn.upper()=='q':break
    msg=sk.recv(1024).decode('utf-8')
    if msg.upper() == 'q': break
    print(msg)
sk.close()
========================
udp协议:
server:

import socket
sk=socket.socket(type=socket.sock_dgram)
sk.bind(('127.0.0.1',9000))
while true:
    msg,client_addr=sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    msg=input(">>>").encode('utf-8')
    sk.sendto(msg,client_addr)
sk.close()

client:
    
import socket
sk=socket.socket(type=socket.sock_dgram)
while true:
    inp=input('>>>').encode('utf-8')
    sk.sendto(inp,('127.0.0.1',9000))
    ret=sk.recv(1024)
    print(ret)
sk.close()