Python3 Chat uygulamasi

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