udb协议

udb协议也是一种协议,它和tcp相比既有缺点也有优点

udb协议所发送的数据可以理解为自带报头,所以他不会出现粘包的情况。但是udp数据只管发送而不管接收,也就是说udp会出现丢包的情况,当客户端的数据服务端没有收到时,客户端并不知道还会继续发数据

udp协议简单实例

# 服务器
import socket
#udp
server=socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8003)) while True:
data,addr=server.recvfrom(1024)
print(data)
server.sendto(data.upper(),addr)
# 客户端
import socket
#udp
client=socket.socket(type=socket.SOCK_DGRAM) while True:
msg=input('>>:')
#直接发
client.sendto(msg.encode('utf-8'),('127.0.0.1', 8003))
data=client.recvfrom(1024)
print(data)

socketserver模块

socketserver主要是用来写服务端并且进行开发的

拿之前所展示的tcp协议来说,我们之前所用的scp协议是单对单的,换句话说,如果服务器已经和第一个客户端连接,那么第二个客户端就会找不到目标。而socketserver则实现了并发的功能。如果把服务器比作一个饭店的话,他就好像是一个前台的迎宾,当有客户进来的时候,他会叫一名服务员去招待,而如果不用的话,就相当于只有一名服务员,第二个客户进不来了。

下面将直接把socketserver用实例来进行展示

#使用socketserver写服务端
#导入模块
import socketserver #自己定义一个类,必须继承BaseRequestHandler
class MyTcp(socketserver.BaseRequestHandler):
#必须重写handle方法
def handle(self):
try:
while True : #通信循环
# print(self)
#给客户端回消息
#conn对象就是request
#接收数据
print(self.client_address)
data=self.request.recv(1024)
print(data)
if len(data)==0:
return
#发送数据
self.request.send(data.upper())
except Exception:
pass if __name__ == '__main__':
#实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据
#第一个参数是绑定的地址,第二个参数传一个类
server=socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyTcp)
#一直在监听
#这么理解:只要来一个请求,就起一个线程(造一个人,做交互)
server.serve_forever()
# 客户端
import socket
import time
soc=socket.socket() soc.connect(('127.0.0.1',8009))
while True:
soc.send('xxxx'.encode('utf-8'))
print(soc.recv(1024))

socketserver模块和udp

就是简单的将以上俩种相结合就完事了

#使用socketserver写服务端
#导入模块
import socketserver #自己定义一个类,必须继承BaseRequestHandler
class MyTcp(socketserver.BaseRequestHandler):
#必须重写handle方法
def handle(self):
print(self)
#数据
print(self.request[0])
print(self.request[1])
print(type(self.request[1]))
self.request[1].sendto('xxxx'.encode('utf-8'),self.client_address)
# try:
# while True : #通信循环
# data=self.request.recvfrom(1024)
# print(data)
# except Exception:
# pass if __name__ == '__main__':
#实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据
#第一个参数是绑定的地址,第二个参数传一个类
server = socketserver.ThreadingUDPServer(('127.0.0.1', 8009), MyTcp)
#一直在监听
server.serve_forever()
# 客户端1
import socket
import time
soc=socket.socket() soc.connect(('127.0.0.1',8009))
while True:
soc.send('yyy'.encode('utf-8'))
print(soc.recv(1024))
# 客户端2
import socket
#udp
client=socket.socket(type=socket.SOCK_DGRAM) client.sendto('lqz'.encode('utf-8'),('127.0.0.1', 8009))
# client.sendto('hello'.encode('utf-8'),('127.0.0.1', 8009))
# client.sendto('world'.encode('utf-8'),('127.0.0.1', 8009))
# client.sendto(''.encode('utf-8'),('127.0.0.1', 8009))
data=client.recvfrom(1024)
print(data)

udp协议以及socketserver的更多相关文章

  1. 基于udp协议的套接字,socketserver模块,多道技术,进程理论

    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

  2. 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  3. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  4. 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  5. (day27)subprocess模块+粘包问题+struct模块+ UDP协议+socketserver

    目录 昨日回顾 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议 socket套接字 今日内容 一.subprocess模块 二.粘包问题 三.struct模块 四.UDP 五.QQ聊天室 ...

  6. 网络编程(四)--基于udp协议的套接字、socketserver模块

    一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                  ...

  7. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  8. Python进阶----UDP协议使用socket通信,socketserver模块实现并发

    Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:

  9. UDP协议&socketserver模块

    UDP协议&socketserver模块 一.UDP协议 1.1 UDP实现简单通信 服务器 ------------------------------------------------- ...

随机推荐

  1. iOS开发高级分享 - iOS上的设备标识符和指纹

    苹果认可的标识符 Apple提供了各种API,以方便用户识别各种用途: 通用标识符(UDID) 在iOS的早期,苹果公司提供了一个uniqueIdentifier财产上UIDevice-亲切地称为ud ...

  2. Head First设计模式——简单工厂、工厂、抽象工厂

    前言:按照惯例我以Head First设计模式的工厂模式例子开始编码学习.并由简单工厂,工厂模式,抽象工厂模式依次演变,归纳他们的相同与不同. 话说Head First认为简单工厂并不是设计模式,而是 ...

  3. 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务

    我们来开始讲述Apache(阿帕奇)服务 小知识: Apache   使得一台服务器上放很多网站,网站同时访问  可以使网站更安全(木马如果是root权限  如果webshell  apache 可用 ...

  4. 修改tomcat默认使用的jdk版本

    1.windows平台 在csetclasspath.bat文件开头加上如下两句(指定JDK): set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_79  se ...

  5. NOIP模拟34

    考试的时候被T2卡了一年....考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数...理论复杂度O(n^2),实际好像卡不掉的样子.但是由于我智障的打了一棵主席树,他M了.... 预计得分 ...

  6. Git基础使用

    前言 Git是版本控制系统,由Linux开源社区开发.与其他的版本系统相比,Git更加快速,便捷.主要是Git存储的是快照,而非差异性比较.并且绝大数操作都是访问本地文件和资源,没有网络时也可以直接提 ...

  7. 记录一些html5和css3的一部分属性

    html5 标签1 video:视频 属性: src:视频的url autoplay:视频在就绪后马上播放 controls:向用户显示控件2 audio:音频 属性类似于video3 属性:drag ...

  8. 基本数据类型(While循环,For循环,列表以及相关用法)

    正常在没有学习循环情况下,我们要输出同样的语句,需要重复打印.相当重要!!!! While循环 将输出放在一行 end=""默认是换行 print("Hello Worl ...

  9. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作(续)

    说明:前期的安装,请转向https://www.cnblogs.com/lq-93/p/11824039.html (4).查看gitlab镜像是否启动成功 docker inspect  容器id  ...

  10. Linux PXE自动化安装centos6,centos7系统

    1.PXE是什么? pxe是Preboot Excution Environment的缩写,是intel公司研发,基于client/server的网络模式,支持远程主机通过网络从远端服务器下载镜,并由 ...