【发布时间】:2020-11-17 16:10:48
【问题描述】:
我正在制作一个 2D 多人游戏,所以我需要交换两个玩家的 x 和 y 值,以便他们可以看到彼此的移动。我就是这样做的,知道如何同时交换它吗?
import socket
import threading
HEADER = 64
PORT = 5050
SERVER = "192.168.0.137"
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
DISCONNECT_MESSAGE = "!DISCONNECT"
x_value = 0
y_value = 0
x_value_2 = 0
y_value_2 = 0
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
def handle_client_1(conn, addr):
print(f"[NEW CONNECTION1] {addr} connected.")
connected = True
while connected:
msg_lenght = conn.recv(HEADER).decode(FORMAT)
if msg_lenght:
msg_lenght = int(msg_lenght)
msg = conn.recv(msg_lenght).decode(FORMAT)
if msg == DISCONNECT_MESSAGE:
connected = False
else:
msg = msg.split(' ')
global x_value_2
global y_value_2
x_value_2 = msg[0]
y_value_2 = msg[1]
print(x_value, y_value)
msg = x_value + " " + y_value
msg_lenght = len(msg)
msg_lenght = str(msg_lenght).encode(FORMAT)
msg_lenght += b' ' * (HEADER - len(msg))
conn.send(msg_lenght)
conn.send((msg).encode(FORMAT))
conn.close()
def handle_client_2(conn, addr):
print(f"[NEW CONNECTION2] {addr} connected.")
connected = True
while connected:
msg_lenght = conn.recv(HEADER).decode(FORMAT)
if msg_lenght:
msg_lenght = int(msg_lenght)
msg = conn.recv(msg_lenght).decode(FORMAT)
if msg == DISCONNECT_MESSAGE:
connected = False
else:
msg = msg.split(' ')
global x_value
global y_value
x_value = msg[0]
y_value = msg[1]
print(x_value, y_value)
msg = x_value_2 + " " + y_value_2
msg_lenght = len(msg)
msg_lenght = str(msg_lenght).encode(FORMAT)
msg_lenght += b' ' * (HEADER - len(msg))
conn.send(msg_lenght)
conn.send((msg).encode(FORMAT))
conn.close()
def start():
server.listen()
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print(f"[LISTENING] Sever is listening on {SERVER}")
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
conn, addr = server.accept()
conn_2, addr_2 = server.accept()
thread = threading.Thread(target=handle_client_2, args=(conn_2, addr_2))
handle_client_2(conn_2, addr_2)
thread2 = threading.Thread(target=handle_client_1, args=(conn, addr))
handle_client_1(conn, addr)
thread2.start()
thread.start()
print("[STARTING] Starting......")
start()
知道如何同时交换它们吗?这两个变量可以一个接一个地交换,但在我的情况下会出错,因为变量交换的速度不够快。
【问题讨论】:
标签: python multithreading server