Socket medya aktarımında farklı veri

Socket ile seri bir şekilde medya alan bir uygulama düşünün. Her 0.3 saniyede bir ekran verisi alıyor. Birde aynı port üzerinden dosya alması gerekli.
Server şunları yapacak
Client bağlanınca sürekli dinlemeye alınacak. Pickle modüyüylede (Burada veri türü, Burada veri) şeklinde istekler gelicek. Demetin ilk indexine göre veriyi işleyecek.

Client şunları yapacak
Sunucuya bağlanacak ve bir socket nesnesi oluşturacak.
2 farklı thread oluşturup ikisinde de sürekli veri gönderecek. Birisinden ekran verisi giderken diğerinden dosya verisi gidicek.

Ama sorun şu ki: aynı servere gönderdikleri için ve serverde de veri sadece clientin oluşturduğu nesneden geleceği için ikisi birlikte veri gönderirken karışıyor veriler. Büyük boyutlu dosyaları tek seferde indiremeyeceğim için paket paket alıp yazıyorum bir paket bitince araya hemen ekran verisi girip veriyi bozabiliyor. Bunu nasıl halledebilirim ? Socket içinde kanal gibi birşeyler açmanın yolu yokmudur ?

Kendi protokolünüzü yazıp farklı türlerdeki verileri birbirinden ayırabilir ya da farklı veriler için farklı bağlantılar kullanabilirsiniz.

Benimde aklıma o geldi kanallar dememin sebebi bir web sitesinde binlerce kişinin aynı anda işlem yapabilmesiydi orda bir kanal örneği olduğunu düşündüm ama nasıl yapacağıma dair fikrim yok. Biraz aydınlatır mısınız ?

Her kanal kendi içinde verileri sıra ile gönderecekse şöyle bir protokol çalışabilir:

Kanal ID’si, Mesaj uzunluğu, Mesaj, Kanal ID’si, Mesaj uzunluğu, Mesaj…


Bu thread safe olmayabilir. Bence iki farklı socket kullanın.

İşte malesef veriler sırasız geliyor yoksa kanala bile ihtiyaç kalmazdı belki ama hangi sırayla geldiklerini bilemiyorum. Tek bir server var bir ip ve port üzerinden açılmış ve tüm veriler buna geliyor. Dışarı farklı farklı portlar açmak istemiyorum alternatif olarak 3 4 farklı port açıp her uygulamayı farklı bir porta yönlendirip her portu kanal olarak kullanacaktım. Şuan bunu tek portla halledebilir miyim onu anlamaya çalışıyorum. Gelen verileri daha veriyi işlemeden farklı kanallara ayırmam gerekecek çünkü veriler ufak paketler halinde geliyor. Bir görüntünün verisi gitmeden araya başka bir veri daha geliyor. Şöyle birşey düşündüm: Clientten gidecek olan veriyi parçalara ayırıp her birini dumpla bir demetin içine atabilirim. Örneğin bir resmin bir parçasını farklı bir dump paketine diğer parçasını farklı bir dump paketine. Bu şekilde verinin hangi kanala ait olacağını belirleyebilirim fakat bu seferde Veriyi parçalamak, her parçalanmış veri için ayrı dump paketleri gibi sorunlar çıkıyor. Yokmudur direk serverin socket nesnesini kanallara ayırabilecek sihirli bi kod falan

Her kanal kendi içinde, kendi verilerini sıralı bir şekilde göndermiyor mu? TCP kullanmıyor musunuz?

Bir port’a aynı cihazdan birden fazla client bağlanabilir.

Port numarası zaten kullandığınız TCP protokolünün bir parçası. Siz de kendi protokolünüze kendi kanal ID’lerinizi ekleyebilirsiniz.


Bence dediğim gibi iki farklı socket kullanın, birden fazla thread ile bu yöntem daha kolay olur.

1 Beğeni

TCP kullanıyorum fakat verilerin sırasız olmasından kastım düzeni ben bozuyorum. 2 farklı Thread hiç durmadan veri gönderiyor ve server geleni alıyor direk. Verilerde parça parça gittiği için bir verinin bir parçası gidince diğer verinin farklı bir parçası ardından gidebiliyor böylece gerçek veri bozulmuş oluyor

Bu aklıma gelmemişti tamamen işimi çözer. Çok teşekkürler.