Python → Python projekti → Python chat server
Python chat server (Socket programiranje)
U ovom projektu kreiraćemo jednostavan chat server koristeći Python i socket modul. Cilj je da nekoliko korisnika može da šalje poruke između klijenata putem servera.
Ovaj projekat je odličan primer za učenje osnova mrežnog programiranja i socket komunikacije u Pythonu.
Potrebni alati
- Python 3
- Terminal / Command Prompt
- Osnovno znanje Python funkcija i petlji
Server kod
import socket
import threading
# Kreiranje server soketa
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 5555))
server.listen()
clients = []
nicknames = []
def broadcast(message):
for client in clients:
client.send(message)
def handle(client):
while True:
try:
message = client.recv(1024)
broadcast(message)
except:
index = clients.index(client)
clients.remove(client)
client.close()
nickname = nicknames[index]
broadcast(f'{nickname} je napustio chat!'.encode('utf-8'))
nicknames.remove(nickname)
break
def receive():
while True:
client, address = server.accept()
print(f"Povezan: {str(address)}")
client.send('NICK'.encode('utf-8'))
nickname = client.recv(1024).decode('utf-8')
nicknames.append(nickname)
clients.append(client)
print(f'Nickname korisnika je {nickname}')
broadcast(f'{nickname} se pridružio chatu!'.encode('utf-8'))
client.send('Povezan na server!'.encode('utf-8'))
thread = threading.Thread(target=handle, args=(client,))
thread.start()
print("Server je pokrenut...")
receive()
Mini projekat – Klijent
Da bi chat radio, potrebni su klijenti koji se povezuju na server.
import socket
import threading
nickname = input("Izaberite nickname: ")
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5555))
def receive():
while True:
try:
message = client.recv(1024).decode('utf-8')
if message == 'NICK':
client.send(nickname.encode('utf-8'))
else:
print(message)
except:
print("Greška!")
client.close()
break
def write():
while True:
message = f'{nickname}: {input("")}'
client.send(message.encode('utf-8'))
receive_thread = threading.Thread(target=receive)
receive_thread.start()
write_thread = threading.Thread(target=write)
write_thread.start()
Kako radi ovaj projekat?
- Server prihvata konekcije od više klijenata
- Poruke se prosleđuju svim klijentima u realnom vremenu
- Korisnici mogu videti ko je pristupio ili napustio chat
Povezane lekcije i projekti
Često postavljana pitanja
Da li ovaj chat server radi preko interneta?
Ovaj primer radi lokalno na računaru. Za rad preko interneta potrebno je koristiti javnu IP adresu i port forward na ruteru.
Šta je socket u Pythonu?
Socket predstavlja tačku komunikacije između servera i klijenta.
Da li možemo dodati GUI klijenta?
Da, može se koristiti Tkinter ili PyQt za vizuelni prikaz poruka.