本文共 2104 字,大约阅读时间需要 7 分钟。
一.udp
udp协议特点:无连接 快 不可靠 面向数据包的传输 只能发短消息client:import jsonimport socketserver_addr = ('127.0.0.1',9090)sk = socket.socket(type=socket.SOCK_DGRAM) #指定类型为udpwhile True:msg = input('>>>')dic = {'msg':msg,'username':'client2'}send_msg = json.dumps(dic).encode('utf-8')sk.sendto(send_msg,server_addr) #发送消息msg,server_addr = sk.recvfrom(1024) #接收消息msg_dic = json.loads(msg.decode('utf-8'))print('消息来自%s: %s' % (msg_dic['username'],msg_dic['msg']))sk.close()server:import jsonimport socketsk = socket.socket(type=socket.SOCK_DGRAM) #指定类型为udp
sk.bind(('127.0.0.1',9090))while True:msg,client_addr = sk.recvfrom(1024) #需先接受客户端的信息,无连接的msg_dict = json.loads(msg.decode('utf-8'))print('消息来自%s : %s' %(msg_dict['username'],msg_dict['msg']))msg = input('>>>') dic = {'msg': msg,'username':'server'} send_msg = json.dumps(dic).encode('utf-8') sk.sendto(send_msg,client_addr) #发送消息
sk.close()
二.socketserver
socketserver可以同时和多个客户端通讯server:import socketserverclass Myserver(socketserver.BaseRequestHandler): #定义一个类,继承BaseRequestHandler
def handle(self): #必须定义一个handle方法conn = self.requestaddr = self.client_addresswhile True:conn.send(b'hello')print(conn.recv(1024),addr[1])if name == 'main':
server = socketserver.ThreadingTCPServer(('127.0.0.1',9090),Myserver) #实例化一个对象server.serve_forever()client:
import socketsk = socket.socket()sk.connect(('127.0.0.1',9090))while True:
print(sk.recv(1024))sk.send(b'bye')sk.close()三.并发编程
进程:正在运行的程序,是计算机中资源分配的最小单位同步:做完一件事情 再做另外一件事情异步:做一件事情的时候 可以再做另一件事情并行 : 并行是指两者同时执行并发 : 并发是指资源有限的情况下,两者交替轮流使用资源阻塞:recv sleep accept input recv recvfrom非阻塞:没有阻塞的情况multiprocessing模块:
p.start():启动进程p.run():进程启动时运行的方法p.terminate():强制终止进程pp.is_alive():如果p仍然运行,返回Truep.join([timeout]):主线程等待p终止p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止锁:同步控制,提高数据的安全性,效率会降低
lock.acquire() #使用锁 同一时间只有一个进程可以访问资源lock.release() #释放锁队列:实现多进程之间的数据传递
q.put(1) #在队列中放值q.get() #在队列中取值q.put_nowait( ) #如果q已满 再放值不阻塞q.get_nowait( ) #如果q已空 再取值不阻塞q.empty() #判断队列是否为空 返回布尔值q.full() #判断队列是否已满,返回布尔值转载于:https://blog.51cto.com/13544778/2153893