Python Socket programlama ile sesli mesajlaşma sisteminin adım adım kurulumu

Katılım
13 Kasım 2020
Mesajlar
319
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Selamlar arkadaşlar üzerinde oldukça aktif bir biçimde çalıştığım bir projem var projenin fonksiyonlarından biri olan mesaj sistemini çözemedim açıklayayım;

-Mikrofona, mesajımızı kime göndereceğimizi ardından mesajımızı söylüyoruz.

-Sistem bunu server.py dosyasına gönderiyor.

-Burada dosya kendisine mesaj geldiğini algılayıp mesaj alıcısının ismini denetliyor.

-Hedef alıcının cihazına bu mesaj metnini gönderiyor.

-Alıcının cihazı bir mesajınız var uyarısını verip pyttsx3 ile mesajı seslendiriyor.

Sistemin basamakları bunlar kod kısmında Python ile olan 5 yıllık deneyimim de ilk defa socket e işim düştü onu da Hint'li hocalardan anlayamadım yardımcı olabilecek var mıdır? (seslendirme, mesajı kaydetme falan onları hallettim sadece socket ve server kısmını halledemedim)
 
Text to speech, speech to text yapıyorsun yani. Kolay o zaman. Önce server client mantığını anlaman lazım. Port açıyorsun, gelen bağlantıyı dinliyor ve dinlediğin bağlantıdan aldığın metni inceliyorsun. Sonrasında istersen başka yere gönder istersen elinde tut. Örnek bir kod bloğu atayım.

Aşağıda attığım kod bloğu 127.0.0.1:8080 üzerinden gelen veriyi dinliyor. Client adlı altı sınıf bağlanan her bir client'ı ayrı bir nesne olarak başlatıp onlar için ayrı ayrı işlemler yapabilmem adına bir wrapper. Thread'den inheritance alıyor ve thread olduğu için server birden fazla client'ı aynı anda kontrol etmemize yardımcı oluyor.

Burada senin yapman gereken yönlendirme kurallarını koymak. Mesela tek bir stringde mesajı ve user'ı gönderebilirsin. Yada önce user var mıyı kontrol ettirirsin sisteme, eğer var yanıtı alırsan mesajı gönderirsin, server da diğer user'a gönderir.

Client kısmını da yazarsın diye düşünüyorum.
Python:
import socket
import threading

class Server:
    connections = []
    total_connections = 0
    class Client(threading.Thread):
        def __init__(self, socket, address, id, name, server):
            threading.Thread.__init__(self)
            self.socket = socket
            self.address = address
            self.id = id
            self.name = name
            self.server = server
       
        def __str__(self):
            return str(self.id) + " " + str(self.address)

        def run(self):
            try:
                data = self.socket.recv(1024)
            except:
                print("Recieve failed!")
            if data != "":
                print(f"ID {self.id}: \"{data.decode("utf-8")}\" | non-decoded: \"{data}\"")
            if data.decode("utf-8") == "server:kill":
                print("Server kill requested. Dying now.")
                self.server.sock.shutdown(socket.SHUT_RDWR)
                self.server.sock.close()
                exit(0)
            print("Client " + str(self.address) + " has disconnected")
            self.server.connections.remove(self)
           
   
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

   
    def accept_connection(self):
        try:
            while True:
                sock, addr = self.sock.accept()
                self.connections.append(self.Client(sock, addr, self.total_connections, "Name", self))
                self.connections[len(self.connections) - 1].start()
                print(f"New client connection at ID {self.connections[len(self.connections) - 1]}")
                self.total_connections += 1
        except:
            print("Server seems to be dead. Can't continue accepting.")

    def Start(self):
        self.sock.bind((self.host, self.port))
        self.sock.listen(5)
        t = threading.Thread(target = self.accept_connection)
        t.start()

if __name__ == "__main__":
    server = Server("127.0.0.1", 8080)
    server.Start()
 
Text to speech, speech to text yapıyorsun yani. Kolay o zaman. Önce server Client mantığını anlaman lazım. Port açıyorsun, gelen bağlantıyı dinliyor ve dinlediğin bağlantıdan aldığın metni inceliyorsun. Sonrasında istersen başka yere gönder istersen elinde tut. Örnek bir kod bloğu atayım.

Aşağıda attığım kod bloğu 127.0.0.1:8080 üzerinden gelen veriyi dinliyor. Client adlı altı sınıf bağlanan her bir Client'ı ayrı bir nesne olarak başlatıp onlar için ayrı ayrı işlemler yapabilmem adına bir wrapper. Thread'den inheritance alıyor ve thread olduğu için server birden fazla Client'ı aynı anda kontrol etmemize yardımcı oluyor.

Burada senin yapman gereken yönlendirme kurallarını koymak. Mesela tek bir stringde mesajı ve User'ı gönderebilirsin. Ya da önce user var mıyı kontrol ettirirsin sisteme, eğer var yanıtı alırsan mesajı gönderirsin, server da diğer User'a gönderir.

Minnettarım hocam yardım için
 

Technopat Haberler

Yeni konular

Geri
Yukarı