美文网首页
套接字通信-仿弹幕

套接字通信-仿弹幕

作者: KingJX | 来源:发表于2018-08-09 19:01 被阅读0次

    home.py

    import socket
    import pygame
    from random import randint
    from myThread import AcceptThread,ConversationThread
    class Color:
        """颜色类"""
        white = 255, 255, 255
        black = 0, 0, 0
    
        @staticmethod
        def rand_color():
            return randint(0, 255),randint(0, 255),randint(0, 255)
    
    def creat_server():
        """创建服务器"""
        server = socket.socket()
        server.bind(('10.7.181.59', 8080))
        server.listen(100)
    
        # 在一个子线程中去监听客户端请求
        # while True:
        server_thread = AcceptThread(server)
        server_thread.start()
    
    
    
    
    if __name__ == '__main__':
        # 创建服务器
        creat_server()
        # 准备屏幕显示信息
        pygame.init()
        screen = pygame.display.set_mode((800,600))
        screen.fill((Color.black))
        pygame.display.flip()
    
        # 让屏幕一直存在
        while True:
            screen.fill((Color.black))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    
            for message in ConversationThread.all_massage:
                if message.alive:
    
                    font = pygame.font.Font('./aa.ttf', 25)
                    text = font.render(message.text, True, message.color)
                    screen.blit(text, (message.x, message.y))
                    message.move()
                else:
                    ConversationThread.all_massage.remove(message)
    
            pygame.display.update()
    
    

    myThread.py

    
    from threading import Thread
    from socket import socket
    from random import randint
    
    class Massage:
        def __init__(self, text):
            self.text = text
            self.x = 800
            self.y = randint(50,100)
            self.color = randint(0, 255),randint(0, 255),randint(0, 255)
            self.alive = True
    
        def move(self):
            self.x -= randint(1, 3)
            if self.x < -100:
                self.alive = False
    
    
    class ConversationThread(Thread):
        """处理不同的客户端信息"""
        all_massage = []
    
        def __init__(self, conversation:socket):
            super().__init__()
            self.conversation = conversation
    
        def run(self):
            """让服务器与客户端持续通话"""
            while True:
                try:
                    re_massage = self.conversation.recv(1024).decode(encoding='utf-8')
                    message = Massage(re_massage)
                    ConversationThread.all_massage.append(message)
                    self.conversation.send('hello'.encode())
    
                except:
                    break
    
    
    
    
    class AcceptThread(Thread):
        """接收请求的线程类"""
    
        def __init__(self, server:socket):
            super().__init__()
            self.server = server
    
        def run(self):
            while True:
                """不断接收客户请求"""
                conversation, addr = self.server.accept()
    
                # 来了一个客户端请求,就创建一个子线程
                t1 = ConversationThread(conversation)
                t1.start()
    

    cilent(客户端)

    import socket
    if __name__ == '__main__':
        client = socket.socket()
        client.connect(('10.7.181.59', 8080))
    
        while True:
    
            message = input('>>>')
            client.send(message.encode())
    
            data1 = client.recv(1024)
            print(data1.decode(encoding='utf-8'))
    
    弹幕.gif

    相关文章

      网友评论

          本文标题:套接字通信-仿弹幕

          本文链接:https://www.haomeiwen.com/subject/xiicbftx.html