Evet, çocuklar, şimdi tartışalım.
Aslında bir liste oluşturan bir fonksiyon, doğru değil.
Doğru.
Böylece dosya ağında olduğumu görebilirsiniz, görmeye başlamazsınız.
Yani bu, tüm ağ mantığını uygulayan dosyadır, örneğin, paket varışları için
bir ağ soketini dinleyen bir dinleyici iş parçacığı oluşturmak gibi.
Doğru.
Bu, ana programımızda dinleyici iş parçacıklarımızı oluşturmak için kullandığımız fonksiyondur.
Bu yüzden bu derste yapacağımız şey, nasıl oluşturulacağı hakkında bir
fikir edinmeniz için bu fonksiyonun uygulamasını hızlıca gözden geçirmek olacak.
Şu anda paket dinleyici tehditleri, bu kod parçasını anlamak, soket programlama, yani bir
futbol programının nasıl yazılacağı konusunda temel bir anlayışa sahip olmanızı da gerektiriyor.
UDP soketleri ya da başka bir şey kullanarak çok basit bir
futbol programı yazmış olsanız bile bu kod parçasını anlayabilmeniz gerekir.
Bu, ana programımızda paket dinleyici iş parçacıkları oluşturmak için
kullandığımız API'dir ve bu API üç argüman ister.
İlk argüman IP adresimiz, ikinci argüman ise port numarasıdır, değil mi? Dolayısıyla, bir paket
dinleyici iş parçacığı oluşturduğunuzda, paket dinleyici iş parçacığı bir IP adresini ve bir
bağlantı noktası numarasını dinlemelidir; bu da birinci ve ikinci bağımsız değişken olarak ayrıştırılır.
Ve bu paket dinleyicisi harici ağdan gelen herhangi bir
paketi vergilendirmeye çalıştığında, bu paket dinleyicisi paketle ilgili
olarak uygulamayı bilgilendirmek için bu işlevi çağırmayı dener.
Ve bu API pakete bir işaretçi döndürür.
Okumayalım, değil mi? Yani temel olarak, bu
API ilk etapta bir iş parçacığı oluşturur.
Artık bir iş parçacığının nasıl oluşturulacağını zaten biliyoruz.
İşte burada, veri test modunda bir iş parçacığı oluşturmaya çalışıyorum, değil
mi? Ve bundan sonra, bazı veri yapıları için bir bellek ayırıyorum.
Dikkat ederseniz bu veri yapısı üçüncü argüman paketi
olarak adlandırılmaktadır, yani bu bizim üçüncü fonksiyona argüman
olarak ayrıştırılması gereken tüm bilgileri saklayabileceğimiz veri yapımızdır.
Doğru.
Dolayısıyla, standart yapının uygulanmasını görmek istiyorsanız,
yalnızca bu dosya içinde tanımlanmıştır.
İşte yapı durumunun tanımı.
Ve burada bu durum yapısının yalnızca üç üyesi olduğunu görebilirsiniz:
IP adresi, bağlantı noktası numarası ve alma işlevinin işaretçisi, değil
mi? Yani temel olarak, bu üç bilgi Start API'yi oluşturan
UDP sunucusuna argüman olarak aktardığınız şeydir, değil mi? Yani burada
yaptığımız şey, tüm argümanları aynı yapı veya aynı nesne
içinde bir araya getirebilmek için bir bellek tahsis etmektir.
Bunun nedeni, tehdit yaratıldığı sırada.
Tüm bu bilgileri right tarafından oluşturulacak tehdit için tek bir argüman olarak iletebiliriz.
Ve bu API, aslında bir iş parçacığı tanıtıcısı olan üçlüye bir işaretçi döndürür.
Yani bu, işlev görmeye çalışan işlevdir ve aslında soketi oluşturmak ve bunu
sonlu bir süre için dinlemek için tüm ağ mantığını uyguladığımız işlevdir.
Şimdi bu fonksiyonun uygulamasını gözden geçirelim.
Ve burada bunun bir tehdit işlevi olan bir işlev olduğunu görebilirsiniz.
Ve yine, veri yapısını orijinal veri türüne geri yazarak açacağım ve
ardından bir dinleyici iş parçacığı oluşturmak için gereken tüm bilgileri çıkaracağım.
Ve elbette, gerekli olmadığında çok doğru olan belleği boşaltmanız gerekir.
İşte burada bir UDP soketi oluşturuyorum, tamam mı? Ve burada
bu UDP soketini IP adresi ve port numarası ile bağlıyorum,
değil mi? Yani yine, bu yalnızca soket programlamaya biraz
aşina iseniz sizin için anlamlı olacak bir kod parçasıdır.
Değil mi? Ve paketimiz, hadi bunu denemeyelim, paket
dinleyici iş parçacığında paketi dinleyeceği için, alınan
paketi kaydedebileceği bir miktar belleğe ihtiyaç duyar.
Yani bu belleği alıcı tampon olarak kullanıyoruz.
Doğru.
Ve UDP dinleyicimizin denediğini ve sonsuz bir döngüye girdiğini görebilirsiniz.
Ve bu sonsuz döngü içinde, paket dinleyici iş parçacığımızın
şu andan itibaren alınan bir API'yi çağırdığını görebilirsiniz.
Bu API'den alınan verinin bloklama yapan bir API olduğuna dikkat edin,
yani veri bu UDP soketine ulaşana kadar dinleyici iş parçacığımız bloklamaya
devam edecektir, değil mi? Dolayısıyla 278 numaralı satır yalnızca paket dinleyici
iş parçacığımız bir paket aldığında ve bu paket bu alma tamponunda
mevcut olduğunda yürütülecektir, değil mi? Dinleyici iş parçacığımız paketi aldığında, uygulamaya
hangi paketin alındığını bildirmek için uygulamaya özel receive fonksiyonunu çağıracağız,
böylece uygulama artık bu paket üzerinde özel bir işlem gerçekleştirebilecektir.
Tamam mı? Paketin genel mimarisi ya da tasarımı
budur, denemeyelim, tek gereken Pietra create API kullanarak
yeni bir deneme oluşturmanız ve soketi bağlama adı
verilen soket sistemini kullanarak bir soket oluşturmanızdır.
Alınan paketi kaydetmek için bellek tamponunu alın.
Ve son olarak paketin alınmasını beklemek için received from API'sini çağırın.
Değil mi? Ve paket ulaştığında, bir geri arama
işlevi kullanarak uygulamayı bilgilendirmek bu kadar basittir.
Şimdi, burada dikkat edilmesi gereken bir husus, bu özel mahkemede, tehdit
iptali ile ilgili herhangi bir şey kullanmadım, değil mi? Dolayısıyla, bu
ders videosunun ardından gelen ödevin bir parçası olarak, paketinizin konsey etiketi
tehdidi olarak okunmadığını oluşturmak için bu dosyada değişiklikler yapmanız gerekir.
Tehdit iptali ile ilgili bölümleri zaten yapmıştık.
Bunu tekrar gözden geçirelim.