编写简单的套接字服务器并不难,然而,若是要建立的并不是简单服务器,还要求助于服务器模块。服务器
模块SocketServer是标准库提供的服务器框架的基石,这个框架包括好多服务器,他们基本服务器的基础上添加了各类功能。框架
SocketServer包含4个基本的服务器:TCPServer(支持TCP套接字流),UDPServer(支持udp数据报套接字)...socket
服务端代码线程
# 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()
客户端代码code
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'))
------------------------------分割线-------------------------------------------------------------server
# 事件是什么?# 某件事情发生的信号# 用来干什么?# 在线程问间通信,然而线程原本就能通信# 做用只有一个就是简化代码# event 线程通信,仅仅用于简化代码,说的就是代替一个bool类型和一个if判断from threading import Thread,Event# set() 将状态修改成True# wait()等待转态为True才继续执行import timeevent = 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()