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
网友评论