基于UDP的交互的实例
1.实现简单的客户端、服务端聊天交互
问题是:客户端不能单独一直发消息回复、、
服务端:
import socket
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind(('127.0.0.1',8080)) while True:
client_data,client_addr=server.recvfrom(1024)
print(client_data.decode(),client_addr)
while True:
msg=input('回复给Client%s的消息>>>:'%client_addr[0])
# server.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
# 特别注意:这里回复消息是一定要写client_addr不能固定
#是针对上面recvfrom收到的客户端接口定向发送的,这个接口不能写死,每个交互的客户端接口都是不一样的
server.sendto(msg.encode('utf-8'),client_addr)
print(client_addr) 客户端:
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True:
msg=input('>>>:')
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
while True:
server_data,server_addr=client.recvfrom(1024)
print(server_data.decode())
2.socketserver实现并发通信
socketserver-TCP应用实例:
并发:看起来同时运行,连接数少的时候并没有感觉,连接数多的时候,就会有延迟
原理就是:
将通信循环放到类里面,通过实例化对象将数据+方法整合到一起
s=socketserver.ThreadingTCPServer((服务端的IP和端口),类名,bind_and_activate=True就是bind和listen)
s:相当与是一个负责连接的套接字对象;
self.request
s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myhandler,bind_and_activate=True)
ThreadingTCPServer:线程,没成功建立一个连接,就会启动一个线程(服务员)
负责专门与建立好的连接做通信循环(调用Myhandler类下面的handle函数)
如何配置:
服务端配置:
import socketserver class Myhandler(socketserver.BaseRequestHandler):
def handle(self):
while True: #循环的去通信
try:
data=self.request.recv(1024) #收消息
if len(data) == 0:break
self.request.send(data.upper()) #发消息 #self.request=conn
except ConnectionResetError:
break
self.request.close() if __name__ == '__main__':
s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myhandler,bind_and_activate=True)
s.serve_forever() #循环建立连接 -------------------------------------------------------------------------------- 客户端配置无需进行改动。。
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))
while True:
msg=input('输入发送的内容:')
if len(msg) == 0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data.decode('utf-8')) phone.close()
socketserver-UDP应用实例:
服务端配置:
import socketserver class Myhandler(socketserver.BaseRequestHandler):
def handle(self):
print(self.client_address) #('127.0.0.1', 49228) 元组格式
print(self.request) #一个元祖:1:数据 2:套接字对象 #(b'\xe4\xbd\xa0\xe5\xa5\xbd', <socket.socket fd=528...>)
# self.request:相当与收到了一个报头(数据部分,套接字对象) data = self.request[0] #元组的第一位就是数据,第二位是套接字对象 print('客户消息:',data.decode('utf-8'))
self.request[1].sendto(data.upper(),self.client_address) if __name__ == '__main__':
s = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), Myhandler, bind_and_activate=True)
s.serve_forever() ---------------------------------------------------------------------------
客户端配置:
import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
msg=input('>>>:').strip()
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data.decode('utf-8')) client.close()
知识点四:
1.串行:一个任务完完整整的运行完毕后,才能运行下一个任务
2.并发:看起来多个任务是同时运行的即可,单核也可以实现并发
3.并行:真正意义上多个任务的同时运行,只有多核才实现并行
4.cpu功能:cup是用来做计算,cpu是无法执行IO操作的,一旦遇到io操作,应该让cpu去执行别的操作
5.多道技术:
1.空间上的复用=》多个进程公用一个内存,如内存中同时有多道程序
2.时间上的复用=》多个进程复用同一个cpu的时间,复用一个cpu的时间片
cpu遇到IO切换:可以提升效率
强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样
才能保证下次切换回来时,能基于上次切走的位置继续运行
基于UDP的交互的实例的更多相关文章
- Java实例练习——基于UDP协议的多客户端通信
昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- 基于UDP协议的网络编程
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...
- python 全栈开发,Day34(基于UDP协议的socket)
昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...
- 基于Udp的五子棋对战游戏
引言 本文主要讲述在局域网内,使用c#基于Udp协议编写一个对战的五子棋游戏.主要从Udp的使用.游戏的绘制.对战的逻辑这三个部分来讲解. 开发环境:vs2013,.Net4.0,在文章的末尾提供源代 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- TCPIP协议编程:基于UDP协议的局域网聊天工具的研发
任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...
- 基于UDP高性能传输协议UDT doc翻译(一)
原文转自:http://hi.baidu.com/doodlezone/item/74a203155efe26dbbf9042dd UDT文档阅读理解 一. 概述 ...
随机推荐
- css对应中文字的英文名称
中文名 英文名 Unicode Unicode 2 Mac OS 华文细黑 STHeiti Light [STXihei] \534E\6587\7EC6\9ED1 华文细黑 华文黑体 STHeiti ...
- 如何删除 CentOS 6 更新后产生的多余的内核?
第一种方法:通过命令的方式解决多余的内核 1.首先查看当前内核的版本号: [root@jxatei ~]# uname -a Linux jxatei.server2.6.32-573.1.1.el ...
- SequenceFile和MapFile
HDFS和MR主要针对大数据文件来设计,在小文件处理上效率低.解决方法是选择一个容器,将这些小文件包装起来,将整个文件作为一条记录,可以获取更高效率的储存和处理,避免多次打开关闭流耗费计算资源.hdf ...
- Python3+selenium3环境搭建笔记
系统:win7 64位浏览器:ie9 64位 chrome70 32位 firefox63 64位python版本:3.6.5 Windows x86 executable installersele ...
- HDU 2147 kiki's game kiki的游戏(博弈,找规律)
题意: 给一个有n*m 个格子的棋盘,将一个硬币放在右上角一格,每次可以往左/下/左下移动一格,碰到不能移动的局面者输. 思路: 找P/N状态.先将(n,1)归为P状态,那么能一步到达此位置的有3个位 ...
- python爬虫之路——变量和变量类型
变量类型: ①单值:int ②多值:数组 ③复杂:类 变量类型:就是变量的数据结构,表示这个变量所代表的内容的格式是怎样的. (多值)四种基本数据结构: 列表,字典,元组,集合 列表: ①元素可变, ...
- 为了少点击几次,自己写了一个Chrome插件
缘由 chrome应用商店有三款二维码插件,自己一直使用的第一款.这三款插件有且只有一个功能就是生成当前页面的URL的二维码. 其实这个功能基本上满足了需要移动端开发在微信里打开页面进行调试的情况. ...
- vue跨域处理(vue项目中baseUrl设置问题)
1.开发环境: 2.生产环境: 然后 const instance = axios.create({ baseURL: process.env.API })
- Bootstrap 徽章(Badges)
本章将讲解Bootstrap徽章(Badges),徽章与标签相似,主要的区别是徽章的圆角比较圆滑. 徽章(Badges)主要用于突出显示新的或未读的项,如果使用徽章,只需要把<span clas ...
- 初涉网络流[EK&dinic]
主要还是板子 Edmonds-Karp 从S开始bfs,直到找到一条到达T的路径后将该路径增广,并重复这一过程. 在处理过程中,为了应对“找到的一条路径把其他路径堵塞”的情况,采用了建反向弧的方式来实 ...