总结day25 ---- udp 初识, 和tcp 进阶
前情提要
一: tcp 和udp 的区别
# tcp
# # 面向连接的 可靠的 全双工的 流式传输
# # 面向连接 :同一时刻只能和一个客户端通信
# # 三次握手、四次挥手
# # 可靠的 :数据不丢失、慢
# # 全双工 :能够双向通信
# # 流式传输 :粘包 无边界
# udp
# 无连接的 面向数据包 不可靠的 快速的
# 无连接的 :不需要accept/connect 也没有握手
# 面向数据包的 :不会粘包
# 不可靠的 :没有自动回复的机制
# 快速的 :没有那些复杂的计算、保证数据传输的机制
二:udp 的简单示例
1:服务端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM) #默认是tcp 协议,需要更改type 类型,
sk.bind(('127.0.0.1',9000)) #建立服务
msg ,addr =sk.recvfrom(1024) #每次大小
print(msg)
print(addr)
sk.sendto(b'world',addr) #内容,地址
sk.close()
2:客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.sendto(b'hello',('127.0.01',9000))
msg,addr =sk.recvfrom(1024)
print(msg)
sk.close()
三:udp实现多人聊天
1:服务端
import socket
sk =socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9000)) #建立服务
while 1:
msg ,addr =sk.recvfrom(1024)
print(msg)
connect =input('>>>>').encode()
sk.sendto(connect,addr)
2:服务端
import socket
sk =socket.socket(type=socket.SOCK_DGRAM)
while 1:
connect =input('>>>>>').encode()
sk.sendto(connect,('127.0.0.1',9000))
msg ,addr =sk.recvfrom(1024)
print(msg)
四:tcp 实现多并发解决聊天问题(并不是群发只是逐个解决)
1:服务端
import socketserver #soceket的进阶类
class Myserver(socketserver.BaseRequestHandler): #固定格式
def handle(self):
conn =self.request
while 1:
conttent =input('>>>>>>>>>>>').encode()
conn.send(conttent) server =socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
server.serve_forever()
2客户端:
import socket
sk =socket.socket()
sk.connect(('127.0.0.1',9000))
while 1:
ret =sk.recv(1024)
print(ret)
sk.close()
小作业:
# 1.完成一个在网络上对文件的传输(进阶需求 如果这个文件非常大 2个G)
# 1)完成文件的下载
# 2)把用户认证这个功能加上
# 必须先认证 再进行上传下载
# 3)文件的一致性校验
# 2.练习一些udp协议的操作
# 3.使用socketserver实现一个并发的基于tcp协议的多人聊天
上面作业等讲完整理
总结day25 ---- udp 初识, 和tcp 进阶的更多相关文章
- 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)
为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...
- 为什么 UDP 有时比 TCP 更有优势
随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单.传输快的优势,在越来越多场景下取代了TCP,如网页浏览.流媒体.实时游戏.物联网. 1.网速的提升给UDP稳定性提供可靠网络保障 CD ...
- 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(一)
转自:http://blog.csdn.net/thebestleo/article/details/52269999 首先我要说明一下,本人新手一枚,本文仅为同样热爱学习的同学提供参考,有不 对的地 ...
- Java基础之UDP协议和TCP协议简介及简单案例的实现
写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...
- 为什么UDP有时比TCP更有优势?
随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单.传输快的优势,在越来越多场景下取代了TCP.1.网速的提升给UDP稳定性提供可靠网络保障 CDN服务商Akamai(NASDAQ: A ...
- UDP 区别于 TCP 的特点
TCP 我们了解得多了,所以今天我们站在 UDP 的角度,探讨一下 UDP 区别于 TCP 的特点. 1. 面向无连接 UDP 比 TCP 简单得多,不需要“三次握手”来建立连接,直接把内容发送出去. ...
- 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105451022 学习课程:<2019王道考研计算机网络> 学习目的 ...
- TCP ,UDP概念和TCP三次握手连接 的知识点总结
OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...
- UDP模式与TCP模式的区别
1.TCP有连接状态,而UDP没有. 2.TCP应用层使用无需考虑包的大小及发送情况,而UDP需要. 3.TCP中IP包大小的决定者是Socket,而UDP为应用层.
随机推荐
- MacOS下打包Python应用
在MacOS下开发的Python应用,不是Web Application,开发好以后,如何给用户使用呢?用户的操作系统也是MacOS 使用py2app打包 一.软件环境 ...
- rtx自定义面板不更新
服务器和客户端自定义面的文件分别在下列xml中. 程序员的基础教程:菜鸟程序员
- MVC知识记录
1.完整深入分析 MVC请求机制:http://blog.jobbole.com/85033/ 2.MVC入门:http://www.aizhengli.com/givecase-aspnet-5-m ...
- radio单选框
1.写 <!DOCTYPE html> <html> <head> <title></title> <script language= ...
- [Jenkins]怎样自定义发出邮件的 From Email Address 和 From Name
在Jenkins上建了一个执行SoapUI的task,想要自定义发送邮件的地址和姓名,怎么办呢? 在Editable Email Notification里面添加Pre-send Script 脚本如 ...
- docker daemon文件/etc/docker/daemon.json配置
On Linux The default location of the configuration file on Linux is /etc/docker/daemon.json. The --c ...
- LVS初步
LVS初步 一见 目录 目录 1 1. 前言 2 2. 思考 2 3. 名词解释 2 4. OSI参考模型 3 5. LVS架构 4 5.1. 负载均衡器(Load Balancer) 4 5.2. ...
- C# Http请求接口数据的两种方式Get and Post
面向接口编程是一种设计思想,无论用什么语言都少不了面向接口开发思想,在软件开发过程中,常常要调用接口,接下来就是介绍C#调用其它开发商提供的接口进行获取数据,http接口方式获取接口数据. Get请求 ...
- Jboss,Tomcat 远程调试配置
Jboss,Tomcat 远程调试配置 2007-12-25 15:51:01| 分类: 默认分类|字号 订阅 Eclipse远程调试JBoss应用 修改JBoss启动配置 ...
- 创建圆角 抛出一个错误:二元运算符“|”不能用于两个UIRectCorner操作数
// let beizer:UIBezierPath = UIBezierPath(roundedRect: btn5.bounds, byRoundingCorners: UIRect ...