Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:prg:python:example:einfaches_chat-programm

Einfaches Chat-Programm - Server und Client

:!: Dieses Beispiel habe ich dem Artikel Create a Basic LAN Chat Room with Python3 (https://python.plainenglish.io/create-a-basic-lan-chat-room-with-python-f334776bf70c) entnommen.

Server:

#server.py
import socket
import threading
 
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
PORT = 8000
ADDRESS = "0.0.0.0"
broadcast_list = []
my_socket.bind((ADDRESS, PORT))
 
def accept_loop():
	while True:
		my_socket.listen()
		client, client_address = my_socket.accept()
		broadcast_list.append(client)
		start_listenning_thread(client)
 
def start_listenning_thread(client):
	client_thread = threading.Thread(
		target=listen_thread,
		args=(client,) #the list of argument for the function
	)
	client_thread.start()
 
def listen_thread(client):
	while True:
		message = client.recv(1024).decode()
		if message:
			print(f"Received message : {message}")
			broadcast(message)
		else:
			print(f"client has been disconnected : {client}")
			return
 
def broadcast(message):
	for client in broadcast_list:
		try:
			client.send(message.encode())
		except:
			broadcast_list.remove(client)
			print(f"Client removed : {client}")
 
accept_loop()

Client:

#client.py
import socket
import threading
 
nickname = input("Choose your nickname : ").strip()
while not nickname:
	nickname = input("Your nickname should not be empty : ").strip()
 
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "0.0.0.0" # "127.0.1.1"
port = 8000
my_socket.connect((host, port))
 
def thread_sending():
	while True:
		message_to_send = input()
		if message_to_send:
			message_with_nickname = nickname + " : " + message_to_send
			my_socket.send(message_with_nickname.encode())
 
def thread_receiving():
	while True:
		message = my_socket.recv(1024).decode()
		print(message)
 
thread_send = threading.Thread(target=thread_sending)
thread_receive = threading.Thread(target=thread_receiving)
thread_send.start()
thread_receive.start()

Stand: 06.12.2021
: Jürgen Kreick

EOF

edv/prg/python/example/einfaches_chat-programm.txt · Zuletzt geändert: 2021/12/06 13:30 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki