WEBVTT

00:05.160 --> 00:08.040
Evet, çocuklar, şimdi tartışalım.

00:09.640 --> 00:12.460
Aslında bir dinleyici iş parçacığı oluşturan bir işlev.

00:12.490 --> 00:13.320
Doğru.

00:13.330 --> 00:18.280
Böylece network utils dot C dosyasında olduğumu görebilirsiniz.

00:18.580 --> 00:22.120
Yani bu, tüm ağ mantığını uygulayan dosyadır.

00:22.120 --> 00:28.540
Örneğin, paket varışları için bir ağ soketini dinleyen bir dinleyici iş parçacığı oluşturmak gibi,

00:28.540 --> 00:29.230
değil mi?

00:29.350 --> 00:34.420
Bu, ana programımızda bir dinleyici iş parçacığı oluşturmak için kullandığımız işlevdir.

00:34.510 --> 00:39.220
Bu ders videosunda yapacağım şey, nasıl oluşturulacağı hakkında bir fikir edinmeniz

00:39.220 --> 00:42.970
için bu işlevin uygulanmasını hızlıca gözden geçirmek olacak.

00:43.660 --> 00:45.760
Paket dinleyici iş parçacıkları, doğru.

00:45.970 --> 00:52.300
Şimdi, bu kod parçasını anlamak aynı zamanda soket programlama ile ilgili temel bir anlayışa sahip olmanızı gerektirir.

00:52.300 --> 00:54.220
Bir soket programı bu şekilde yazılır.

00:54.220 --> 01:00.520
UDP soketleri veya başka bir şey kullanarak çok basit bir soket programı yazmış olsanız bile, bu kod

01:00.520 --> 01:02.890
parçasını anlayabilmeniz gerekir.

01:05.480 --> 01:11.120
Bu, ana programımızda paket dinleyici iş parçacıkları oluşturmak için kullandığımız API'dir.

01:11.360 --> 01:14.210
Ve bu API üç argüman ister.

01:14.210 --> 01:20.330
İlk bağımsız değişken bir IP adresi ve ikinci bağımsız değişken de bağlantı noktası numarasıdır, değil mi?

01:21.560 --> 01:27.110
Bu nedenle, bir paket dinleyici iş parçacığı oluşturduğunuzda, paket dinleyici iş parçacığı bir IP adresini ve birinci ve ikinci bağımsız

01:27.110 --> 01:30.550
değişken olarak aktarılan bağlantı noktası numarasını dinlemelidir.

01:30.560 --> 01:35.690
Ve bu paket dinleyici iş parçacığı harici ağdan gelen herhangi bir paket tespit ettiğinde,

01:35.690 --> 01:43.310
bu paket dinleyici iş parçacığı uygulamayı paketle ilgili olarak bilgilendirmek için bu işlevi çağırır.

01:43.430 --> 01:48.050
Ve bu API, paket dinleyici iş parçacığına bir işaretçi döndürür.

01:48.050 --> 01:48.680
Doğru.

01:49.950 --> 01:54.270
Yani temel olarak bu API ilk etapta bir iş parçacığı oluşturur.

01:54.300 --> 01:56.700
Artık bir iş parçacığının nasıl oluşturulacağını zaten biliyoruz.

01:56.910 --> 02:00.980
Burada müstakil modda bir iş parçacığı oluşturmaya çalışıyorum.

02:00.990 --> 02:01.710
Doğru.

02:02.770 --> 02:07.380
Ve bundan sonra bazı veri yapıları için bir bellek ayırıyorum.

02:07.390 --> 02:15.070
Dikkat ederseniz, bu veri yapısı iş parçacığı argüman paketi olarak adlandırılır, yani iş parçacığı fonksiyonuna

02:15.070 --> 02:22.450
argüman olarak aktarılması gereken tüm bilgileri saklayabileceğimiz veri yapımız budur.

02:22.450 --> 02:23.280
Değil mi?

02:23.290 --> 02:28.390
Dolayısıyla, bu veri yapısının uygulamasını görmek istiyorsanız, yalnızca bu dosya içinde tanımlanmıştır.

02:28.600 --> 02:35.170
İşte bu veri yapısının tanımı ve burada bu veri yapısının yalnızca üç üyesi olduğunu görebilirsiniz.

02:35.170 --> 02:40.240
Bu IP adresi, port numarası ve alma fonksiyonunun işaretçisidir.

02:40.240 --> 02:40.930
Doğru.

02:42.820 --> 02:49.150
Yani temel olarak, bu üç bilgi UDP sunucusuna argüman olarak aktardığınız şeydir.

02:49.180 --> 02:50.410
API oluşturun ve başlatın.

02:50.440 --> 02:51.010
Doğru.

02:51.100 --> 02:58.330
Yani burada yaptığımız şey, tüm argümanları aynı yapı veya aynı nesne içinde bir araya getirebilmemiz

02:58.330 --> 03:01.960
için bir bellek tahsis etmektir.

03:01.990 --> 03:05.470
Bunun nedeni, iş parçacığı oluşturma sırasında.

03:06.530 --> 03:11.210
Tüm bilgileri p thread create API'sine tek bir argüman olarak aktarabiliriz.

03:11.240 --> 03:11.900
Doğru.

03:12.710 --> 03:17.660
Ve bu API, aslında bir iş parçacığı tanıtıcısı olan iş parçacığına bir işaretçi döndürür.

03:18.190 --> 03:23.860
İşte bu, bir iş parçacığı işlevi olan işlevdir ve bu işlevde, aslında bir soket oluşturmak

03:23.860 --> 03:30.190
ve bunu sonsuz bir süre boyunca dinlemek için tüm ağ mantığını uyguluyoruz.

03:31.420 --> 03:34.750
Şimdi bu fonksiyonun uygulamasını gözden geçirelim.

03:35.420 --> 03:39.770
Ve burada bunun bir iş parçacığı işlevi olan işlev olduğunu görebilirsiniz.

03:39.770 --> 03:46.460
Ve yine, veri yapısını orijinal veri türüne geri yazarak açacağım ve ardından bir dinleyici iş

03:46.460 --> 03:51.230
parçacığı oluşturmak için gereken tüm bilgileri çıkaracağım.

03:51.530 --> 03:56.870
Ve elbette malloc yapılan belleği, gerekli olmadığında boşaltmanız gerekir.

03:57.080 --> 04:01.040
Yani burada bir UDP soketi oluşturuyorum, değil mi?

04:01.040 --> 04:07.490
Ve burada bu UDP soketini IP adresi ve port numarası ile bağlıyorum.

04:07.580 --> 04:08.330
Doğru.

04:08.960 --> 04:14.660
Yani yine, bu yalnızca soket programlamaya biraz aşina iseniz sizin için anlamlı olacak

04:14.660 --> 04:16.250
bir kod parçasıdır.

04:16.250 --> 04:17.000
Değil mi?

04:18.660 --> 04:24.870
Paket dinleyici iş parçacığımız paketi dinlemeye geçeceği için, paket dinleyici iş parçacığımızın

04:24.900 --> 04:29.590
alınan paketi kaydedebileceği bir miktar belleğe ihtiyacı vardır.

04:29.610 --> 04:33.270
Bu yüzden bu belleğe alıcı tamponu diyoruz, değil mi?

04:33.600 --> 04:39.530
Ve UDP dinleyici iş parçacığımızın daha sonra sonsuz bir döngüye girdiğini görebilirsiniz.

04:39.540 --> 04:46.350
Ve bu sonsuz döngü içinde paket dinleyici iş parçacığımızın bir API receive from çağırdığını görebilirsiniz.

04:46.350 --> 04:47.040
Doğru.

04:47.070 --> 04:55.140
Şimdi bu API'den alınan verinin bloklama yapan bir API olduğuna dikkat edin, yani veri bu UDP soketine ulaşana kadar

04:55.140 --> 04:59.310
dinleyici iş parçacığımız bloklamaya devam edecektir.

04:59.310 --> 05:00.090
Doğru.

05:01.710 --> 05:09.120
Dolayısıyla 78 numaralı satır yalnızca paket dinleyici iş parçacığımız bir paket aldığında ve bu paket bu alma tamponunda

05:09.120 --> 05:11.910
mevcut olduğunda yürütülecektir.

05:11.940 --> 05:12.720
Doğru.

05:13.600 --> 05:20.410
Dolayısıyla, dinleyici iş parçacığımız paketi aldığında, uygulamaya hangi paketin alındığını bildirmek

05:20.410 --> 05:27.880
için uygulamaya özel receive işlevini çağıracağız, böylece uygulama artık bu paket üzerinde özel bir işlem

05:28.210 --> 05:30.460
gerçekleştirebilir.

05:30.490 --> 05:31.150
Doğru.

05:31.630 --> 05:35.830
Paket dinleyici iş parçacığının genel mimarisi veya tasarımı budur.

05:35.860 --> 05:44.500
Tek gereken thread kullanarak yeni bir thread oluşturmanız, API oluşturmanız ve socket sistemini kullanarak bir socket oluşturmanızdır.

05:44.500 --> 05:46.540
Soketi bağlamayı çağırın.

05:46.570 --> 05:52.960
Alınan paketi kaydetmek için bellek tamponunu alın ve son olarak paketin alınmasını

05:52.960 --> 05:57.130
beklemek için API'den alma işlemini çağırın.

05:57.130 --> 05:57.730
Doğru.

05:57.730 --> 06:04.750
Ve paket ulaştığında, bir geri arama işlevi kullanarak uygulamayı bilgilendirmek bu kadar basittir.

06:05.770 --> 06:12.040
Burada dikkat edilmesi gereken bir husus, bu kodda iş parçacığı iptali ile ilgili herhangi bir

06:12.040 --> 06:13.810
şey kullanmadığımdır.

06:13.810 --> 06:14.560
Doğru.

06:14.710 --> 06:20.980
Bu nedenle, bu ders videosundan sonraki ödevin bir parçası olarak, paket dinleyici iş parçacığınızı iptal edilebilir

06:20.980 --> 06:25.360
iş parçacığı olarak oluşturmak için bu dosyada değişiklik yapmanız gerekir.

06:25.660 --> 06:30.730
İplik iptali ile ilgili bölümleri zaten yapmıştık, bu yüzden bunu tekrar gözden geçirelim.
