udp协议以及socketserver
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的更多相关文章
- 基于udp协议的套接字,socketserver模块,多道技术,进程理论
进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...
- 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...
- 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- (day27)subprocess模块+粘包问题+struct模块+ UDP协议+socketserver
目录 昨日回顾 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议 socket套接字 今日内容 一.subprocess模块 二.粘包问题 三.struct模块 四.UDP 五.QQ聊天室 ...
- 网络编程(四)--基于udp协议的套接字、socketserver模块
一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...
- 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket
目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...
- Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- UDP协议&socketserver模块
UDP协议&socketserver模块 一.UDP协议 1.1 UDP实现简单通信 服务器 ------------------------------------------------- ...
随机推荐
- Android H5混合开发(2):自定义Cordova插件
前言 Cordova虽然定义了很多基础的插件,供H5端使用原生设备的功能. 但是,如果业务相关的功能,需要提供给H5端使用,那么,就需要我们自定义插件了. 这个"自定义"不是指由A ...
- QHDYZ模拟赛20191027 提前透题
你们想的美 我给你们透一下题目名称 别刷博客了快去做题
- NOIP模拟 28
果然昨天和别人合照丢的脸今天都加进RP里了 T3是用了dp快速幂(???),T1,T2考试的时候把想法都写注释了. T1: #include<cstdio> using namespace ...
- EffectiveJava-1
最近在看EffectiveJava,记录一下,分享一下自己的心得. 一.将局部变量的作用于最小化 在第一次使用的地方进行声明,过早的声明局部变量,会延长局部变量的生命周期,若在代码块外声明变量,当程序 ...
- 卖饲料——单调队列优化dp
题目描述 约翰开车来到镇上,他要带K吨饲料回家.运送饲料是需要花钱的,如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元.约翰可以从N家商店购买饲料,所有商店都在一个坐标轴 ...
- wangkoala杂题总集(根据个人进度选更)
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
- c#数据结构之Array、ArrayList、List、LinkedList对比分析
一.前言: 在c#数据结构中,集合的应用非常广泛,无论是做BS架构还是CS架构开发,都离不开集合的使用,比如我们常见的集合包括:Array.ArrayList.List.LinkedList等.这一些 ...
- Python 基础之socket编程(一)
Python 基础之socket编程(一) 可以进行通信玩儿了,感觉不错不错,网络通信就像打电话,我说一句你听一句之后,你再说一句,我听一句,就这样.....下去了.不扯淡了,来来来,看看今天都搞了点 ...
- spring security 简单入门
spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...
- 对于 TCP 三次握手的理解
假设名叫 A 和 B 的两个人要进行通信,那么他们两人之间,首先要确保通信顺畅. 而确保通信顺畅,就要从 3 个维度,确定 8 个能力 3 个维度分别是: 1.人知道(A 知道.B 知道) 2.人(A ...