1、UDP的使用:
首先需要调用socket server的ThreadingUDPServer(IP地址和端口号,调用的类方法,调用的类需要继承 BaseRequestHandler 这个类,并需要重写handle()方法,serve_forever() 用户循环保持连接。 self.client_address 是连接地址,self.request是一个由信息和套接字组成的二元组。
import socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
# obj是套接字对象,相当于s声明的套接字
print(self.request)
msg, obj = self.request
print("msg",msg)
print("obj",obj)
obj.sendto("2333".encode('utf-8'), self.client_address)
s = socketserver.ThreadingUDPServer(('127.0.0.1',8080),Myserver)
# 连接循环
s.serve_forever()
>>> (b'hello', <socket.socket fd=464, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)
>>> msg b'hello'
>>> obj <socket.socket fd=464, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>
2、TCP的使用:
调用 socketserver.ThreadingUDPServer( (IP地址和端口号) ,调用类的方法)。self.request 就是连接conn用于收发消息, self.client_address是地址。
import socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
# 相当于conn
print(self.request)
# 相当于地址
print(self.client_address)
res = self.request.recv(1024)
print(res)
self.request.send('OK'.encode('utf-8'))
s = socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myserver)
# 连接循环
s.serve_forever()
>>> <socket.socket fd=532, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 51527)>
>>> ('127.0.0.1', 51527)
3、继承关系:Baseserver 是socket server 的基类。
3、链接的合法性:
验证链接是否合法就是,对验证信息加' 盐 ',这个盐就是特殊的加密方式,只有合法的客户端才知道加密方式,将信息发送到客户端,客户端加密后服务端将信息解密,对比是否相等。