Question: I'm trying to code a proxy in python for a Minecraft server that is hosted on my own computer. While I want to intercept and modify the packages that get sent between the client and the server, at first I just want to send all packages through without modifying them. The problem is that only 2 packages get sent: one from the server to the client and one from the client to the server. I'm using the socket and threading library in python. Also important to note is that in the server.properties file I have online_mode turned off, because when online_mode was turned on the server tried to encrypt the connection which led to Minecraft getting stuck at "Encrypting..." when connecting via the proxy. While I have tried this many times, I still get the same results, so here's an example from ChatGPT: import socket import threading def handle_client(client_socket, target_host, target_port): # Connect to the target server target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) target_socket.connect((target_host, target_port)) # Relay data between client and target while True: data = client_socket.recv(4096) if len(data) == 0: print("Client connection closed.") break print(f'Received from client: {data}') target_socket.send(data) print("Sent to target.") response = target_socket.recv(4096) if len(response) == 0: print("Target connection closed.") break print(f'Received from target: {response}') client_socket.send(response) print("Sent to client.") # Close the connections client_socket.close() target_socket.close() def start_proxy(proxy_port, target_host, target_port): # Create a server socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', proxy_port)) server_socket.listen(5) print(f'Proxy server listening on port {proxy_port}') while True: client_socket, addr = server_socket.accept() print(f'Accepted connection from {addr[0]}:{addr[1]}') client_handler = threading.Thread( target=handle_client, args=(client_socket, target_host, target_port) ) client_handler.start() # Usage example proxy_port = 55555 target_host = "localhost" target_port = 25565 start_proxy(proxy_port, target_host, target_port)  My Minecraft server runs on localhost (a.k.a 127.0.0.1) on port 25565 and the proxy listens on localhost:55555. When I run the code and then join the server via the proxy (localhost:55555) in Minecraft, I get the following printed messages: Proxy server listening on port 55555 Accepted connection from 127.0.0.1:52403 Received from client: b'\x10\x00\xfa\x05\tlocalhost\xd9\x03\x02"\x00\x0fBoterBramKroket\x01\x11Zu\x9eC\xa3N\xd6\xbf\x03\\\x00\xe6\x96\xcc\x00' Sent to target. Received from target: b'\x03\x03\x80\x02' Sent to client. Client connection closed.  I don't understand why the other packages won't get sent. I hope someone has experience in coding minecraft proxies and can tell me more, thanks in advance!

Answer: Hi will test I founded how to do it here the code. So the in your code is that problem is you need to handle server and client in thread because the two in the same while as recv wait for data and that blocking the client part as two separate thread send server data to client and one send client data to the server. Thanks for the help with the base code ! import socket import threading class handle_server(threading.Thread): def __init__(self,client_socket,target_host, target_port,target_socket): super().__init__() self.client_socket = client_socket self.target_host = target_host self.target_port = target_port self.target_socket = target_socket def run(self): client_socket = self.client_socket target_host = self.target_host target_port = self.target_port target_socket = self.target_socket while True: data = client_socket.recv(4096 * 8 * 8 * 8) if len(data) == 0: print("Client connection closed.") break print(f'Received from server: {data}') target_socket.send(data) print("Sent to target.") client_socket.close() target_socket.close() class handle_client_Thread(threading.Thread): def __init__(self,client_socket,target_host, target_port,target_socket): self.client_socket = client_socket self.target_host = target_host self.target_port = target_port self.target_socket = target_socket super().__init__() def run(self): client_socket = self.client_socket target_host = self.target_host target_port = self.target_port target_socket = self.target_socket while True: response = target_socket.recv(4096 * 8 * 8 * 8) if len(response) == 0: print("Target connection closed.") break print(f'Received from client: {response}') client_socket.send(response) print("Sent to client.") client_socket.close() target_socket.close() def handle_client(client_socket, target_host, target_port): # Connect to the target server target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) target_socket.connect((target_host, target_port)) handle_server(client_socket, target_host, target_port,target_socket).start() handle_client_Thread(client_socket, target_host, target_port,target_socket).start() def start_proxy(proxy_port, target_host, target_port): # Create a server socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', proxy_port)) server_socket.listen(5) print(f'Proxy server listening on port {proxy_port}') while True: client_socket, addr = server_socket.accept() print(f'Accepted connection from {addr[0]}:{addr[1]}') client_handler = threading.Thread( target=handle_client, args=(client_socket, target_host, target_port) ) client_handler.start() # Usage example proxy_port = 55555 target_host = "localhost" target_port = 25565 start_proxy(proxy_port, target_host, target_port)