socketserver及相关的类 (处理socket服务端)+ event事件的使用

编写简单的套接字服务器并不难,然而,如果要创建的并非简单服务器,还要求助于服务器模块。

模块SocketServer是标准库提供的服务器框架的基石,这个框架包括好多服务器,他们基本服务器的基础上添加了各种功能。

SocketServer包含4个基本的服务器:TCPServer(支持TCP套接字流),UDPServer(支持udp数据报套接字)...

 

服务端代码

# import socketserver
#
# from threading import current_thread
#
# class MyHandler(socketserver.BaseRequestHandler):
# def handle(self):
# print(self.server)
# print(self.client_address)
# print(self.request)
# print(current_thread())
#
# while True:
# data = self.request.recv(1024)
# print(data.decode('utf-8'))
# self.request.send(data.upper())
#
#
# server = socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyHandler)
# server.serve_forever()

 

 

客户端代码

from socket import *

client = socket(AF_INET,SOCK_STREAM)

client.connect(('127.0.0.1',8090))

while True:
msg = input('>>: \n').strip()
client.send(msg.encode('utf-8'))

data = client.recv(1024)
print(data.decode('utf-8'))

 

------------------------------分割线-------------------------------------------------------------

 

 

# 事件是什么?
# 某件事情发生的信号

# 用来干什么?
# 在线程问间通讯,然而线程本来就能通讯
# 作用只有一个就是简化代码

# event 线程通讯,仅仅用于简化代码,说的就是代替一个bool类型和一个if判断
from threading import Thread,Event
# set() 将状态修改为True
# wait()等待转态为True才继续执行


import time

event = Event()

def server_task():

print('正在启动')
time.sleep(4)
print('启动成功等待连接')
event.set()


def client_task():
event.wait()
print('连接成功')


t1 = Thread(target=server_task)
t1.start()

t2 = Thread(target=client_task)
t2.start()

t1.join()
t2.join()
posted @ 2018-11-15 13:46  张仁国  阅读(501)  评论(0编辑  收藏  举报
目录代码