Arkadaşlar ben ve arkadaşlarım için bir kod streaming uygulaması geliştiriceğim ama aklıma bir şey takıldı biz s.recv(size) dediğimiz zaman o size kadar veriyi çekiyor benim istediğim ise mesajın uzunluğu ne olursa olsun hepsini çekmesi bu techwithtimde vardı ama kodu anlayamadım bana biri mantığını detaylı bir şekilde anlatabilir mi?
Mesajın uzunluğunu da mesajla beraber yolluyor, bu uzunluk hep sabit sayıda byte kullanılarak (bu kodda HEADER yani 64) yollandığı için mesajı alan kişi hangi bölümün mesajın uzunluğunu belirttiğini biliyor.
nasıl sabit sayıda byte oluyor mesela mesajın büyüklüğü 65 ise nasıl göndericek sanırım anlamadım biraz daha açıklayabilirmisiniz yani o uzunluğu da almak için bir header(64) gerekmiyormu sanırım kafam çok karışık
bana socket programlama için bir link atarmısınız sanırım headerı nasıl kullanacağımı bilmiyorum yani mesajın uzunluğu o mesajın uzunluğunu çekmek için kullanacağımız headerdan büyük olursa normalde o mesajın uzunluğunuda çekememesi lazım değil mi? off sanırım baya bir araştırma yapıcam
Zaten mesajın uzunluğu bu örnekte 64 karakteri geçerse sıkıntı oluşur. Ama 9999999999999999999999999999999999999999999999999999999999999999 yeterince büyük bir sayı, geçilebileceğini sanmıyorum.
Header’in uzunluğu sabit olduğu için oluşturduğumuz sistemde tek mesajın sahip olabileceği uzunluğun bir sınırı var. Başka yöntemler kullanarak bu sınıra takılmayacak sistemler de yazabiliriz. Mesela:
{mesajın uzunluğu}{ayıraç}{mesaj}{mesajın uzunluğu}{ayıraç}{mesaj}
| Bir mesaj || Başka bir mesaj |
Sadece bir defa mesaj yollayacaksanız ve bu mesajın uzunluğu belli ise daha iyi olabilir. Ama siz art arda mesaj yollamak istemiyor musunuz?
Verdiğiniz kodda mesajın uzunluğu onluk tabandaki gösterimi ile 64 byte uzunluğunda bir header olarak yollanıyor, bu header’in sahip olabileceği en büyük sayısal değer "9"*64
olabilir evet eğer bu işlem clientin main threadinde olacaksa biraz performans kaybı olmaz mı adam çok hızlı yazıyor diyelim yoksa yanlış mı düşünüyorum kusuruma bakmayın
neyse sizi anladım ben tavsiyeniz için teşekkür ederim son olarak ben klavyedeki girişi input fonksiyonu olmadan nasıl alırım
birde bir sorun var aklımda ya kişi yazdığı kodu silmek isterse ne yapıcağım