Python3 Chat uygulamasi

Merhabalar.Python uzerinde bir chat uygulamasi yapmak istiyorum.Rica etsem biri chat uygulamasinin temel mantigini ve threading kutuphanesi aciklaya bilirmi

Merhaba,
Zaman buldukça bu başlığa mesaj yazmaya çalışırım, daha öğrenmem gereken konular var ama şimdilik socket modülü ile oluşturulan bir sunucu ve istemcinin mesajlaşmasıyla alakalı çok da karmaşık olmayan bir programı anlatmaya çalışayım. Yalnız bu uygulama henüz daha iki farklı bilgisayarda denenmedi.

Önce server.py adlı bir dosyaya aşağıdaki kodları yazalım:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket

# Bir tane socket nesnesi oluşturulur.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Yerel makinenin ismi alınır.
host = socket.gethostname()
# Servis için bir tane port numarası belirlenir.
port = 12347
# Yerel makine ismi ile port numarası bağlanır.
s.bind((host, port))
# İstemci bağlantısı için port dinlemesi başlatılır.
s.listen(10)  # -> 10 istemci bağlanabilir.
# istemci ve adresi kabul edilir.
c, addr = s.accept()
# Bağlanan istemciye hoşgeldin mesajı gönderilir.
c.sendall(bytes("Merhaba!".encode("utf-8")))
# Bağlantı adresi sunucu ekranına bastırılır.
print('{} bağlandı.'.format(addr))
# Sunucunun sürekli açık kalması için sonsuz döngüye ihtiyacımız var.
# Veya mesaj adediyle veya başka parametrelerle döngü sonlu da olabilir...
while True:
    # İstemciden gelen, ara bellek boyutu 1024 olan,
    # byte tipindeki mesaj stringe dönüştürülür.
    # Bu string'in ilk elemanı hariç diğer elemanları data isminde
    # bir değişkene atanır.
    data = str(c.recv(1024))[1:]
    # Eğer istemciden mesaj gelmişse
    if data:
        # İstemcinin mesajını bastır.
        print("İstemci: {}".format(data))
        # İstemciye göndereceğimiz mesajı yazalım.
        respond = input("Sunucu: ").encode("utf-8")
        # Mesaj "q" ise programdan çıkalım.
        if respond == b"q":
            exit()
        # Diğer her türlü durumda mesajımız karşı tarafa gitsin.
        else:  # İstemciye mesaj byte verisi olarak gönderilir.
            c.sendall(bytes(respond))

Şimdi de client.py adındaki bir dosyaya aşağıdakileri yazalım:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 12347

# Sunucuya bağlanalım.
s.connect((host, port))

# İstemci sunucuya bağlandıktan sonra 
# Sunucunun yaptığı işin aynısını yapıyor.
while True:
    data = str(s.recv(1024))[1:]
    if data:
        print("Sunucu: {}".format(data))
        respond = input("Istemci: ").encode("utf-8")
        if respond == b"q":
            exit()
        else:
            s.sendall(bytes(respond))

Threading modülüyle yeni yeni ilgilenmeye başladım, biraz bilgi edineyim, bildiklerimi paylaşırım.

5 Beğeni

Cok tesekkur ederim ilginiz icin

Threading modulü bilgisayarın aynı anda birden çok işlem yapmasını sağlıyor.
Ama yakın bir zaman önce öğrendiğim için şu an hatırlamıyorum

Evet, ben de dün yeni yeni kolay örnekler yapmaya başladım, biraz araştırma yapmam lazım. Sonra bu başlığa eklemeler yapmaya çalışırım.

Bu arada tercihe bağlı olarak sunucu ve istemci mesajlari colorama modülüyle renklendirilebilir. Veya bir karşılama ekranı veya bir uygulama arayüzü ve kullanıcıların chat esnasında yapabileceği türden işlemler tanımlanıp program geliştirilebilir. socket’in dosya gönderme işlevi de vardı yanılmıyorsam.

Abi uygulama bu haliyle ayri bilgisayarlarda calismiyor.
Sunucudaki hostu ‘’ yaparsan ve istemcideki hostuda sunucu cihazinin ip adresi yaparsan olur.

port = 12347 yazmışsın
12347. port trojan portu arka kapı oluşturuyor
eğer bu kodlar çalıştırılırsa çalışan pc 12347.porta bağlancak ?

Bu portu kullanan şöyle bir virüs tespit etmişler herhalde.

12347 	tcp 	trojans 	W32.Mytob.FP@mm [Symantec-2005-062017-2756-99] - mass-mailing worm that opens backdoors on ports 10087/tcp and 12347/tcp.

“Trojan portu” diye bir sey yok. “Bazi trojanlarin kullandigi port” diye bir sey var. Bu her port olabilir.

Gordugum kadariyla arka kapi olusmuyor. Nerede gordun arka kapiyi?

Biri dinleyecek, digeri baglanacak; evet.

başka bir pc de paylaşmak için server.py host = socket.gethostname() yerine host = 'localhost' yazınız client.py ise host = socket.gethostname() yerine host = '0.tcp.ngrok.io'
yaptıktan sonra ngrok bulunduğu dizine gelip komut satırına ngrok.exe tcp 12347 yazmanız yeterli olucaktır

ayrıca client.py dosyasında port kısmını ngrokta verdiği port ile deiştirmeniz gerekicek

1 Beğeni