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的交互的实例的更多相关文章

  1. Java实例练习——基于UDP协议的多客户端通信

    昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...

  2. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  3. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  4. 基于UDP协议的网络编程

    UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...

  5. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

  6. 基于Udp的五子棋对战游戏

    引言 本文主要讲述在局域网内,使用c#基于Udp协议编写一个对战的五子棋游戏.主要从Udp的使用.游戏的绘制.对战的逻辑这三个部分来讲解. 开发环境:vs2013,.Net4.0,在文章的末尾提供源代 ...

  7. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  8. TCPIP协议编程:基于UDP协议的局域网聊天工具的研发

    任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...

  9. 基于UDP高性能传输协议UDT doc翻译(一)

    原文转自:http://hi.baidu.com/doodlezone/item/74a203155efe26dbbf9042dd                  UDT文档阅读理解 一.  概述 ...

随机推荐

  1. 【selenium学习笔记一】python + selenium定位页面元素的办法。

    1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...

  2. Effective C++ 重要条款

    学习c++的童鞋们,这本书不能错过,最近在学校图书馆借来这本书,准备好好啃啃它了,先把它的基本内容过一遍吧. 改变旧有的的C习惯 条款1:尽量以const和inline取代#define. 条款2:尽 ...

  3. 一键部署基于GitLab的自托管Git项目仓库

    https://market.azure.cn/Vhd/Show?vhdId=9851&version=11921 产品详情 产品介绍GitLab https://about.gitlab.c ...

  4. mysql-单表操作

    mySql单表操作主要有一下内容: 1.查询:查询又分为几种,范围查询,模糊查询.空值查询.多条件查询 查询的语句格式为:SELECT 字段 1,字段 2,字段 3...FROM 表名 WHERE 条 ...

  5. POJ Dollar Dayz 美元假日(完全背包,常规+大数)

    题意:给出整数n和k,n代表拥有的钱数量,k代表有k种工具,其价钱分别为1~k.求n元能有多少种购买的方案. 思路:k最大有100,数量过大,要用大数.其他的基本和完全背包一样. #include & ...

  6. 2017.10.4 QBXT 模拟赛

    题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...

  7. self & this 上下文

    对象:指向对象的首地址: 函数:代表了函数运行的主要上下文: 内部:在类的内部使用. self Within the body of a class method, self refers to th ...

  8. [web开发] 利用微信小程序开发上海大学失物招领平台

    我从开始学微信小程序到最后完全写完这个小程序耗时四天,可以说开发难度非常之低,门槛也非常低,之前从来没接触过微信小程序,重新写下开发记录. 先放图: 1.前端开发 前端我用到了iview的ui框架,因 ...

  9. 使用Timer组件实现倒计时

    实现效果: 知识运用:  Timer组件的Enabed属性 实现代码: private void timer1_Tick(object sender, EventArgs e) { DateTime ...

  10. Kafka 完全分布式集群环境搭建

    思路: 先在主机s1上安装配置,然后远程复制到其它两台主机s2.s3上, 并分别修改配置文件server.properties中的broker.id属性. 1. 搭建前准备 示例共三台主机,主机IP映 ...