Forum

Bildirimler
Tümünü temizle

Python ile Terminalden Chat Applikasyonu

2 Yazılar
2 Üyeler
4 Likes
467 Görüntüleme
R4d1x
(@admin)
Trusted Member Admin
Katılım : 2 sene önce
Gönderiler: 36
Konu başlatıcı  

Terminal_Chat

Terminal üstünde Chat Yapabileceginiz bir uygulama. Windows yada Linux fark etmeksizin calisir! Uzak mesafeler yada Local Ag icerisinde kullanabilirsiniz! Tamamen Multi Thread ile calisan bir Client yapisi mevcuttur! Yani tek bir Terminal/Komut Istemcisinde hem Yeni gelen mesajlari görebilirsiniz hemde mesajlasmaya devam edebilirsiniz!

Yükleme

Eger uzaktan baglanti olacaksa Güvenlik Duvarinizda Port acmak durumunda kalabilirsiniz! Statik bir IP adressiniz yok ise DynDNS kullanabilirsiniz!

Server Calistirma

python server.py

Client Calistirma

python client.py

Client.py :

#!/bin/python3
import socket
from threading import Thread

HOST = '' # Server IP addressini yada DynDNS giriniz!
PORT = 65432 # Server Portunu belirtiniz!
BUFFERSIZE = 1024
ADDR = (HOST, PORT)
katilimci_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
katilimci_socket.connect(ADDR)

print("Baglanti saglandi! Kendinize bir takma isim belirleyin: ")

def main():
    while True:
        data = katilimci_socket.recv(BUFFERSIZE)
        print("Gelen mesaj: ", str(data.decode('utf8')))

    katimci_socket.close()

def mesaj_yaz():
    while True:
        print("Mesaj giriniz: ")
        message = input()
        katilimci_socket.send(message.encode("utf8"))

if __name__ == '__main__':
    ACCEPT_THREAD = Thread(target=main)
    ACCEPT_THREAD2 = Thread(target=mesaj_yaz)
    ACCEPT_THREAD.start()
    ACCEPT_THREAD2.start()
    ACCEPT_THREAD.join()
    ACCEPT_THREAD2.join()

Server.py:

#!/bin/python3
import socket
from threading import Thread


katilimcilar = {}
adressler = {}

HOST = '' # Host icin IP veya DynDNS giriniz
PORT = 65432 # Burda Port degistirmek isteyebilirsiniz!
BUFFERSIZE = 1024 # Paket büyüklügü
ADDR = (HOST,PORT)
SERVER = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
SERVER.bind(ADDR)

def gelen_kontrol():
    while True:
        katilimci, katilimci_adress = SERVER.accept()
        print(f"{katilimci_adress} baglandi!")
        katilimci.send(bytes("Baglanti saglandi!", "utf8"))
        adressler[katilimci] = katilimci_adress
        Thread(target=katilimci_baglantisi, args=(katilimci,)).start()


def katilimci_baglantisi(katilimci):
    isim = katilimci.recv(BUFFERSIZE).decode("utf8")
    msg = "%s baglanti sagladi" %isim
    broadcast(bytes(msg, "utf8"))
    katilimcilar[katilimci] = isim
    while True:
        msg = katilimci.recv(BUFFERSIZE)
        if msg != bytes("{cikis}", "utf8"):
            broadcast(msg, isim+": ")
            print(isim, ": ", msg)
        else:
            katilimci.send(bytes("{cikis}", "utf8"))
            katilimci.close()
            del katilimcilar[katilimci]
            broadcast(bytes("%s cikis yapti" %isim, "utf8"))
            break


def broadcast(msg, prefix=""):
    for sock in katilimcilar:
        sock.send(bytes(prefix, "utf8")+msg)

while True:
    SERVER.listen()
    print("Baglanti bekleniyor...")
    ACCEPT_THREAD = Thread(target=gelen_kontrol)
    ACCEPT_THREAD.start()
    ACCEPT_THREAD.join()
    SERVER.close()

Koddunyam.net %100 ücretsiz bir bilgi paylasim sitesidir! Bilgiyi paylasmak istemeyenler ve kendine saklamak isteyenlerin yeri kesinlikle burasi degildir.


   
Alıntı
(@karalale)
New Member
Katılım : 2 sene önce
Gönderiler: 3
 

ilk fırsatta bunu denemek ve geliştirmek isterim. böyle kritik bir konuda belkide tek eğitim bu sanırım. özellikle threed konusu detaylandırılmalı. şu günlerde whatsapp ile yaşanılan sorun böyle bir alternatif ihtiyacını gözler önüne sermiştir. 

Teşekkürler Başkan...


   
R4d1x reacted
CevapAlıntı
Paylaş: