C# Asenkron Socket Paket Gönderimi ve Alma İşlemleri hakkında kapsamlı bilgi edinin Bu makalede, C# dilinde asenkron soket kullanarak veri gönderme ve alma süreçlerini öğreneceksiniz Detaylar burada!
C# dilinde, iki farklı uygulama arasında veri alışverişi yapmak için kullanılan Socket arayüzü, asenkron bir şekilde paket gönderimini ve alma işlemlerini gerçekleştirebilmektedir. Bu makalede, C# dilinde asenkron olarak socket paketi gönderme ve alma işlemleri adım adım anlatılacaktır.
İlk olarak, gönderim işlemi gerçekleştirilecektir. Soket öğesi oluşturulduktan sonra belirlenen bir hedef alıcıya EndPoint oluşturulur ve gönderilecek paket BeginSendTo metodu ile asenkron bir şekilde gönderilir. Ardından, alma işlemi için gönderici belirlenerek EndPoint nesnesi oluşturulur ve BeginReceiveFrom metodu kullanılarak paket asenkron bir şekilde alınır. Son olarak, alınan paket okunarak içinde bulunan veriler elde edilir ve kullanıma hazır hale getirilir.
Asenkron olarak C# dilinde socket paketi gönderme ve alma işlemlerinin nasıl yapıldığını adım adım öğrenmek isteyenler, bu makalede yer alan ayrıntılı açıklamaları takip ederek kolayca işlemlerini gerçekleştirebilirler.
Socket Nedir?
Socket, bilgisayar ağı üzerindeki iki farklı uygulama arasında veri alışverişi yapabilmelerini sağlayan bir arayüzdür. Socketler, bir IP adresi ve port numarası aracılığıyla iki uygulama arasında iletişim kurar. Bu iletişim, veri gönderme ve alma işlemlerini kapsayan işlemleri içerir.
Socketler, TCP/IP protokolünün temel taşlarından biridir ve internet bağlantısını da yine socketler aracılığıyla gerçekleştirir. Socketler, kullanıcıların ağ üzerindeki diğer cihazlarla etkileşim kurmalarına ve veri paylaşmalarına izin verir. Ayrıca, socketlerin birçok farklı türü vardır ve her bir tür, belirli bir amaç için en uygun olan iletişim türünü sağlar.
C# Asenkron Socket Gönderme İşlemi
Asenkron olarak C# dilinde bir socket paketi göndermek oldukça kolaydır. İşlem adımları aşağıdaki gibi sıralanabilir:
Öncelikle, System.Net.Sockets adlı sınıfın Socket öğesi kullanılarak bir soket oluşturulması gerekir. Oluşturulan soket, iki nokta arasında veri taşıyacak bir kanal olarak düşünülebilir.
Bir sonraki adım, gönderilecek paketin hedef alıcısını tanımlayan EndPoint nesnesinin oluşturulmasıdır. Bu nesne, gönderilecek paketin hedef IP ve port bilgilerini içerir.
Oluşturulan sokete, BeginSendTo metodunu kullanarak paket asenkron bir şekilde gönderilir. Bu yöntem, paketin hedef alıcısına iletilmesini sağlayacaktır.
Yukarıdaki adımlar takip edilerek asenkron bir şekilde C# dilinde soket paketi göndermek oldukça kolaydır. Bu işlem sayesinde iki farklı uygulama arasında veri alışverişi sağlanabilir.
Soket Oluşturma
Soket oluşturma işlemi, System.Net.Sockets adlı sınıfın Socket öğesi kullanılarak gerçekleştirilir. Bu öğe, bir bilgisayar ağı üzerinde veri alışverişi yapmak üzere tasarlanmıştır. Soket nesnesi oluşturmak için belirli bir işletim sistemi portu kullanılır. Bu port, bilgisayar ağı üzerinde veri alışverişi için kullanılan belirli bir bağlantı noktasıdır. İşletim sistemi, soket nesnesini aynı portta açarak, gönderilecek ya da alınacak paketleri bu portta dinleyebilir.
Soket oluşturma işlemi, öncelikle belirli bir IP adresi ve port numarasına sahip bir hedef belirleyerek gerçekleştirilir. Daha sonra, bu hedefe yönlendirilen paketin asenkron bir şekilde gönderilmesi için System.Net.Sockets adlı sınıfın Socket öğesi kullanılır. Ayrıca, .NET Framework'te bulunan diğer sınıflar kullanılarak da asenkron soket işlemleri gerçekleştirilebilir.
- System.Net.Sockets sınıfı, soket işlemlerinde kullanılan temel sınıftır.
- Socket öğesi, soket nesnesini temsil eder.
- EndPoint öğesi, gönderilecek paketin hedef alıcısını tanımlar.
- BeginSendTo() metodu, belirtilen EndPoint'e paket gönderir.
EndPoint Oluşturma
Asenkron olarak bir socket paketi gönderileceği zaman, paketin hedef alıcısını tanımlamak amacıyla EndPoint nesnesi oluşturulur. Bu nesne, gönderilecek paketin hedef IP adresi ve port numarasını içerir.
Bu işlem için öncelikle bir IPEndPoint nesnesi oluşturulur. Bu nesne, bir IP adresi ve port numarasına sahiptir. İP adresi burada ya da tanımlı olabilir. Tanımsız bir IP adresi kullanmak için IPAddress.Any kullanılır.
EndPoint nesnesi, daha sonra Socket.SendTo veya Socket.BeginSendTo metoduna iletilerek, gönderilecek paketin hedef alıcısının belirlenmesi sağlanır.
Örneğin, 192.168.1.100 IP adresinde çalışan bir alıcıya, 8888 numaralı bir porta paket göndermek istediğimizde, IPEndPoint nesnesi aşağıdaki şekilde oluşturulur:
Kod Parçası |
---|
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8888); |
Bu kod parçası, EndPoint nesnesinin oluşturulması için gereklidir.
Paket Gönderme
Soket oluşturulduktan ve EndPoint nesnesi oluşturulduktan sonra, asenkron bir şekilde paket göndermek için C# dilinde Socket sınıfının BeginSendTo metodu kullanılır. Bu yöntem, paketi hedef alıcının IP adresi ve port numarasına doğrudan gönderir ve işlem başlatılır.
Bu yöntem kullanılarak gönderilecek paketin boyutu belirlenir ve belirtilen hedef alıcıya aktarılır. Ayrıca, bu yöntemde paket gönderilirken başka işlemler yapılabileceği için süreç kesintiye uğramaz. İşlem tamamlandığında ise, tamamlanma durumu üstlenen AsyncCallback metodu çalıştırılır. Bu sayede, gönderme işleminin durumu öğrenilebilir.
Aşağıdaki kod örneği ile asenkron bir şekilde Socket sınıfının BeginSendTo metodu kullanarak paket gönderme işlemi gerçekleştirilebilir:
Kod Örneği |
---|
EndPoınt e host EndPoınt = new EndPoınt(IPAddress.Parse("192.168.1.23"),22);socket.BeginSendTo(broadcast,m,SocketFlags.None,e,new AsyncCallback(SendData), socket); |
Bu örnekte, 192.168.1.23 IP adresine ve 22 numaralı porta sahip hedef alıcı belirtilmiştir. BeginSendTo metodu, broadcast isimli paketi m boyutu ile hedef alıcıya gönderir. Gönderme işlemi tamamlandığında, SendData metodunu kullanarak işlemin tamamlandığına dair bir mesaj gönderilir. Böylece asenkron olarak paket gönderme işlemi gerçekleştirilmiş olur.
C# Asenkron Socket Alma İşlemi
C# dilinde asenkron olarak bir socket paketi almak, göndermek kadar önemlidir ve özellikle ağ programlamada sıkça kullanılmaktadır. İşte bu durumda, alınacak paketin önceden belirlenmesi ve hedef gönderici bilgisinin doğru bir şekilde belirlenmesi gereklidir.
Alınacak paketin hedef göndericisi EndPoint nesnesi kullanılarak belirlenir. Bu nesne, paketin gönderildiği IP adresi ve port numarasını içerir. Bu bilgilere sahip olduktan sonra, Socket sınıfının EndReceiveFrom metodu, paket almak için kullanılabilir.
Paket almak için, Socket sınıfının BeginReceiveFrom metodu kullanılır. Bu yöntem, asenkron bir şekilde çalışır ve belirlenen EndPoint adresinden gelen paketi alır. Paket alındığında, BeginReceiveFrom metodunun geri çağrılması çalışır ve alınan verilerin boyutu ile ilgili bilgilendirme yapar.
Alınan paketi okumak için, asenkron bir şekilde geri çağrılan fonksiyonun içinde bulunan byte parametresi kullanılır. Bu parametre içinde, alınan verilerin boyutu ve verinin kendisi bulunur. Bu veriler kullanıma hazır hale getirilir ve ilgili işlemler için kullanılır.
EndPoint Oluşturma
Alınacak paketin göndericisi belirlenir ve EndPoint nesnesi oluşturulur. EndPoint, socket işleminin gerçekleştirileceği hedefi tanımlar. Hedef belirlerken, bağlantı protokolü ve bağlantı noktası belirtilmelidir.
C# dilinde EndPoint sınıfı, System.Net isim uzayının bir parçasıdır. Bu sınıf ile IP adresi ve port numarası belirtilerek bir EndPoint nesnesi oluşturulur. Örneğin:
Değişken | Açıklama |
---|---|
IPAddress ipAddress | IP adresi nesnesi |
int port | Port numarası |
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port); | EndPoint'i oluşturmak için kullanılır |
Bu şekilde bir EndPoint nesnesi oluşturulduktan sonra, socket nesnesi bu nesneye göre işlem yapmaya hazır hale gelir.
Paket Alma
C# dilinde, asenkron bir şekilde socket paketi alma işlemi yapmak oldukça kolaydır. Bunun için öncelikle, EndPoint nesnesinin oluşturulması gerekir. Bu nesne, alınacak paketin göndericisini belirler. BeginReceiveFrom metodu kullanılarak paket socketsız bir şekilde asenkron bir şekilde alınır.
Burada dikkat edilmesi gereken nokta, BeginReceiveFrom metodunun kendisini çağıran bir geri çağırma işlevi (callback function) ile birlikte kullanılmasıdır. Bu işlev, paket tamamlandığında otomatik olarak çağrılır ve alınan verileri işler. Ayrıca, BeginReceiveFrom metodunun parametrelerinde, alınacak paketin boyutu ve hangi port numarasından alınacağı da belirtilir.
Parametre | Açıklama |
---|---|
buffer | Alınacak verilerin tutulacağı tampon bellek (buffer) bellek bloğu. |
size | Alınacak paket boyutu. |
socketFlags | SocketFlags öğesi, soket nesnesinin davranışını kontrol eder. |
remoteEP | Alınacak paketin göndericisi. |
callback | İşlemin tamamlandığında çağrılacak geri çağırma işlevi. |
Alınan paketin şekli ve boyutu, gönderen uygulamanın paket oluşturma yöntemi tarafından belirlenir. Alınan paketler daha sonra okunarak, içinde bulunan veriler elde edilir ve kullanıma hazır hale getirilir.
Paket Okuma
Asenkron olarak alınan socket paketi, öncelikle okunmalıdır. Bunun için Socket sınıfının BeginReceiveFrom metodu kullanılır. Bu metot, parametre olarak EndPoint, AsyncCallback ve asenkron olarak alınacak verinin boyutunu alır.
Alınan veri, byte dizisi olarak elde edilir. Bu byte dizisi daha sonra kullanacak olduğumuz veri tipine dönüştürülür. Örneğin, string bir veri alındıysa byte dizisi, string veri tipine dönüştürülür. Böylece, aldığımız veriler kullanıma hazır hale gelir.
Verilerin okunması sırasında çeşitli hatalar oluşabilir. Örneğin, veri boyutu, belirtilen boyuttan daha uzunsa hata meydana gelir. Bu nedenle, verilerin doğru bir şekilde okunduğundan emin olmak için hata kontrolü yapılması çok önemlidir.
Aynı şekilde, aldığımız verilerin düzgün bir şekilde kullanıma hazır hale getirilmesi de önemlidir. Verilerin türüne ve kullanım amacına uygun bir şekilde dönüştürülmesi gerekmektedir. Bu işlemler doğru bir şekilde gerçekleştirildiğinde, C# dilinde asenkron olarak socket paketi alma işlemi başarılı bir şekilde tamamlanmış olur.