I'm trying to create a LAN Chat, but I've encountered difficulties. When I input content using input(), it gets sent to the server side, and the data does show the message (I've confirmed this using print). It should then be sent to another client, but the other client does not receive the message.
server.py
import socket
import threading
def handle_client(client_socket, client_address):
global clients
while True:
try:
data = client_socket.recv(1024)
if not data:
break
broadcast(data, client_address)
except:
break
client_socket.close()
def broadcast(message, sender_address):
global clients
for client_info in clients:
client_socket, client_addr = client_info
try:
if client_addr != sender_address:
message_with_sender_ip = f"{sender_address[0]}:{sender_address[1]}: {message.decode('utf-8')}"
client_socket.send(message_with_sender_ip.encode("utf-8"))
except:
clients.remove(client_info)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ...
clients = []
while True:
client, addr = server.accept()
client_info = (client, addr)
clients.append(client_info)
client_thread = threading.Thread(target=handle_client, args=(client, addr))
client_thread.start()
client.py
import socket
import threading
import time
import asyncio
server_ip = '127.0.0.1'
server_port = 1314
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def receive_messages():
while True:
try:
data = client_socket.recv(1024)
if not data:
break
print(data.decode('utf-8'))
except:
break
async def send_msg():
while True:
message = input()
if check_connection():
client_socket.send(message.encode('utf-8'))
else:
break
def check_connection():
# ...
async def main():
global cnt
global client_socket
try:
client_socket.connect((server_ip, server_port))
# ...
await send_msg()
except socket.error:
# ...
await main()
receive_thread = threading.Thread(target=receive_messages)
receive_thread.start()
asyncio.run(main())
I have also confirmed that the execution of threads is functioning properly. I've checked the firewall as well, but it's evident that the messages are not being blocked.