socketserver基于TCP下的使用:
服务端
import socketserver
class MyTcpHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
data=self.request.recv(1024)
if not data:break#此行代码针对linux系统
self.request.send(data.upper())
except ConnectionResetError:
break
self.request.close()
if __name__ == '__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyTcpHandler)
server.serve_forever()
此代码中的self.request相当于一个conn:
客户端
from socket import *
import os
client=socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8080))
while True:
msg='%s hello'%os.getpid()
client.send(msg.encode("utf-8"))
data=client.recv(1024)
print(data.decode('utf-8'))
socketserver基于UDP下的使用:
服务端
import socketserver
class MyUdpHandler(socketserver.BaseRequestHandler):
def handle(self):
res=self.request[0]
print('客户端发来的数据:',res)
self.request[1].sendto(res.upper(),self.client_address)
if __name__ == '__main__':
server=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUdpHandler)
server.serve_forever()
此时的self.request是一个元组:
客户端
from socket import *
import os
client=socket(AF_INET,SOCK_DGRAM)
while True:
msg='%s hello'%os.getpid()
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data.decode('utf-8'))