How to resolve the issue of message reception in LAN Chat

29 Views Asked by At

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.

0

There are 0 best solutions below