Server socket

用法都一样

区别:  self.request  

  TCP  self.requsst 代表具体的链接

  UDP  self.requst 代表一个小元组(元组里面: 第一个元素 客户端发来的数据 ,第二个元素  回复客户端的套接字对象)

基于UDP:

import socketserver
from threading import current_thread
# fork linux下一个多进程接口 windows没有这接口
# 用于处理请求的类

class MyHandler(socketserver.BaseRequestHandler):
    def handle(self):
        print(self)
        print(self.server)  # 获取封装的服务器对象
        print(self.client_address)# 客户端地址
        print(self.request)# 是一个元祖 包含收到的数据 和服务器端的socket
        # data,client = self.request

        data = self.request[0]
        print(data.decode("utf-8"))
        self.request[1].sendto(b"i am server",self.client_address)

server = socketserver.ThreadingUDPServer(("127.0.0.1",9999),MyHandler)
server.serve_forever()



# ThreadingUDPServer  在初始化的时候创建了socket对象
# serve_forever() 将sockt注册到select(多路复用的)
# select中返回一个ready  如果为True则可以处理 _handle_request_noblock   内部创建了一个MyHandler的示例  调用了handler函数

#  使用了socket  OOP  多线程

# 正常开发中 如果并发量不大 就是用socketserver
# 否则用协程





"""
使用时的区别:
ThreadingTCPServer
    handler 在连接成功时执行
    self.request 是客户端的socket对象  
    
ThreadingUDPServer
    handler 接收到数据时执行
    self.request  数据和服务器端的socket对象 


"""
server
#基于TCP 客户端
import socket
c  =  socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = (('127.0.0.1',2020))
# c.connect(addr)
while True:
    msg = input('>>>: ')
    c.sendto(msg.encode('utf-8'),addr)

    print(c.recvfrom(1024)[0].decode('utf-8'))
client

基于TCP:

import socketserver
from threading import current_thread
# fork linux下一个多进程接口 windows没有这接口

# 用于处理请求的类
class MyHandler(socketserver.BaseRequestHandler):
    def handle(self):
        print(self)
        print(self.server)  # 获取封装的服务器对象
        print(self.client_address)# 客户端地址
        print(self.request)# 获取客户端的socket对象
        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",9999),MyHandler)
server.serve_forever()
server
#基于TCP 客户端
import socket
c  =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr = (('127.0.0.1',2020))
c.connect(addr)
while True:
    msg = input('>>>: ')
    c.send(msg.encode('utf-8'))

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

猜你喜欢

转载自www.cnblogs.com/TF511/p/9965741.html