网络编程2 TCP、UDP协议 与socket模块

TCP与UDP协议

复制代码
1.TCP协议(重点)
   """凡事必须有回复才能继续"""
    三次握手连接
        -1.TCP协议也称为可靠协议,数据不容易丢失
             数据不容易丢失的原因: 
                   因为存在反馈机制,给对方发送消息后会保留一个副本,知道对方回应消息才会删除该副本,否则会在一定时间内反复发送
        -2.洪水攻击
             同一时间大量的客户端请求建立连接会导致服务器一直处于SYN_RCVD状态
        -3.服务端如何区分客户端建立链接的请求
             可以对请求做唯一标识
    四次挥手断链接
        -1.四次不能合并为三次
             因为中间需要确认消息是否发完(TIME_WAIT)
 2.UDP协议(数据报协议,不可靠协议)
       """只管发送。不管查看"""
        -1.早期的qq就是UDP协议的
        -2.使用UDP协议的原因是因为我们只要知道对方地址就可以发消息了,简单,快捷,粗暴
    
        
复制代码

TCP图解三次握手:

 

 TCP图解四次挥手: 

 

 

socket模块

 

复制代码
1.socket也叫套接字
    基于文件类型的套接字家族(单机)
    AF_UNIX
    基于网络类型的套接字家族(联网)
    AF_INET
"""
socket类似于操作系统,封装了复杂的接口提供简单快捷的接口
"""

2.socket代码:
复制代码
"""服务端"""

import socket

# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()         # 括号内不写参数默认TCP协议 family=AF_INET基于网络的套接字 type=SOCK_STREAM流式协议TCP
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1',8080))  # 127.0.0.1为本地回环地址,只有自己的电脑可以访问
# 3.设立半连接池                   # 当有多个客户端来链接的情况下 我们可以设置等待数量(不考虑并发问题),
# 在测试半连接池的时候 可以不用input获取消息 直接把消息写死即可  server.listen(
5) # 4.等待接收消息 sock,addr = server.accept() # return sock,addr 三次握手 print(sock,addr) # 5.接收客户端发送的消息 data = sock.recv(1024) # 接收客户端发送过来的消息 1024字节 print(data.decode('utf8')) sock.senf('发送的消息'.encode('utf8')) # 6.关闭双向通道 sock.close() # 四次挥手 # 7.关闭服务端 server.close() """客户端""" # 1.生成socket对象指定类型和协议 client = socket.socket() # 2.通过服务端发送消息 client.connect(('127.0.0.1',8080)) # 3.直接给服务端发送消息 client.send('回复的消息'.encode('utf8')) # 4.接受服务端发送过来的消息 data = client.recv(1024) print(data.decode('utf8')) # 5.断开与服务端的连接 client.close()
复制代码

3.代码优化 

  -1.聊天内容自定义

     针对消息采用input获取

  -2.让聊天循环起来

     将聊天的部分用循环包起来

  -3.用户输入的消息不能为空

     本质其实是两边一边收(recv),一边发(send)

  -4.服务器多次重启可能会报错

     Address already in use 主要是mac电脑会报

       方式1:改端口号

       方式2:博客里面代码拷贝即可

  -5.当客户端异常断开的情况下如何让服务端继续服务其他客人

      windows服务端会一直报错

      mac服务端会有一段时间反复接收空消息延迟报错

      要对特殊情况进行异常处理,空消息判断

复制代码

 

posted @   橘子菌菌n  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示