首页 > 编程语言 >网络编程2 TCP、UDP协议 与socket模块

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

时间:2022-11-16 17:11:19浏览次数:43  
标签:协议 UDP socket TCP 消息 服务端 客户端

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服务端会有一段时间反复接收空消息延迟报错

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

 

标签:协议,UDP,socket,TCP,消息,服务端,客户端
From: https://www.cnblogs.com/juzijunjun/p/16896574.html

相关文章

  • TCP\UDP协议 socket模块
    目录传输层主要协议TCP协议三次握手TCP协议反馈机制四次挥手洪水攻击UDP协议socket模块socket代码简介socket.socket()server.bind()server.accept()sock.recv()sock.send......
  • socket 模块
    socket模块我们知道基于网络编写程序时,需要使用OSI七层协议里的七层,每一层都要写。很复杂很繁琐。socket模块相当于集成了这一块,封装了复杂的接口提空了简单快捷的接......
  • 传输层之TCP与UDP协议、socket
    目录传输层之TCP与UDP协议应用层socket模块Socket通信socket代码简介代码优化半连接池的概念传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的ps:不遵循上述协议也......
  • 关于 WebSocket 和 HTTP 区别的思考以及一个最简单的 WebSocket 的客户端和服务器实现
    笔者之前与一位同事研究了Cypress的visit方法,其源码实现最终是调用了WebSocket向visit参数里指定的website通行并获取数据,见下图变量ev.data的值。我这位同......
  • socket模块简介
    今日内容概要传输层只TCP与UDP协议应用层socket模块简介socket模块基本使用代码优化处理半连接池的概念今日内容详细传输层只TCP与UDP协议TCP与UDP都是用来......
  • socket
    目录今日内容概要今日内容详细传输层之TCP与UDP协议应用层socket模块socket代码简介代码优化半连接池的概念今日内容概要传输层之TCP与UDP协议应用层socket模块简介s......
  • docker报错Got permission denied while trying to connect to the Docker daemon soc
    报错内容GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Get"http://%2Fvar%2Frun%2Fdocker.sock/v1.......
  • fastapi socketio
    E:\song\agv_fastapi_socket2\fastapi-socketio-example-main\app.pyimportosimportpathlibimportsecretsimporttimefromtypingimportOptionalimportsocket......
  • Linux下Socket编程(转)
    什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解So......
  • Linux 下Socket编程基础(转)
    1、 引言Linux的兴起可以说是Internet创造的一个奇迹。Linux作为一个完全开放其原代码的免费的自由软件,兼容了各种UNIX标准(如POSIX、UNIX System V 和 BSD UNIX ......