Bu yazımızda C# Socket TCP Paketleri ile nasıl çalışılır ve neler yapılır öğreneceksiniz Detaylı bilgi ve örnekler için tıklayın!

C# programlama dilinde soketler, TCP/IP protokolü üzerinden veri transferi yapmak için kullanılır. TCP/IP protokolü, internet bağlantısı üzerinde kullanılan en temel protokollerden biridir ve internet üzerinde veri transferi yaparken en sık kullanılan protokoldür. Soketler, protokoldeki farklı bilgi türlerini ve sinyalleri alıp iletmek için kullanılır. TCP protokolü, veri bütünlüğü ve doğruluğunu korumak için hatadan düzeltme yöntemleri kullanır ve bu da soketlerin güvenli veri transferi yapmasına izin verir.
Soketler, bilgisayar ağlarında bilgi iletiminin yapı taşıdır diyebiliriz. Ağ üzerinde bilgi transferi yapmak, iki farklı nokta arasında bir köprü kurarak yapılır. Bu köprüyü sağlayan ve iletişimi kurabilen şey ise soketlerdir. TCP/IP protokolü üzerinden veri transferi yapmak için soket programlama kullanılır. Bu programlama dili sayesinde soketler oluşturulabilir, bağlantıları kurulabilir ve veri transferi gerçekleştirilebilir.
TCP Nedir?
TCP (Transmission Control Protocol), bilgisayarlar arasında veri transferi yaparken kullanılan bir protokoldür. İnternetin temelini oluşturan bu protokol, ağ üzerinde güvenli ve sıralı veri transferini sağlar. TCP, IP (Internet Protocol) protokolü ile birlikte kullanılarak TCP/IP protokolü adını almıştır.
IP protokolü, verilerin doğru bir şekilde adreslenmesini ve yönlendirilmesini sağlar. Ancak doğru sırayla ve güvenli bir şekilde transfer edilmesi için TCP protokolü kullanılır. Yani TCP/IP protokolü, verilerin doğru bir şekilde gönderilmesi, iletilmesi ve alınmasını sağlayarak iletişim ağında sıfır hata ile çalışmayı hedefler.
IP Protokolü | TCP Protokolü |
---|---|
Veri paketlerini yönlendirir | Veri transferinde kontrol sağlar |
Doğru hedefe iletilmesini sağlar | Güvenli ve sıralı veri transferini sağlar |
Yüksek hızda veri transferi yapar | Hata kontrolü ve veri bütünlüğünü sağlar |
IP protokolü, verilerin paketlenerek iletim ağından geçmesini sağlar. Ancak, doğru bir şekilde sıralandırılmamış paketler iletim süresini artırır ve veri bütünlüğünü bozar. Bu nedenle, TCP protokolü veri paketlerini yeniden yapılandırarak, paketlerin doğru bir şekilde sıralanmasını sağlar.
TCP protokolü aynı zamanda, gönderilen verilerin alıcı tarafından kontrol edilmesini sağlar. Eğer bir paket kaybolursa, TCP protokolü tekrar gönderir. Ayrıca, veri transferi sırasında hatalar oluşursa, TCP protokolü bu hataları tespit ederek veri bütünlüğünü sağlar.
Socket Nedir?
Socket, uygulamaların birbirleriyle iletişim kurmasına izin veren bir ağ programlama arayüzüdür. Kısaca, şebeke üzerindeki makineler arasında veri almaları ve göndermeleri için bir yol sağlar. İki ana socket türü vardır; TCP soketleri ve UDP soketleri.
- TCP soketleri, güvenilir, sıralı ve hata düzeltmeli veri transferi için kullanılır. Bir tür “sürüm kontrol” oluşturulan, alıcı ve verici cihazlar arasında bir bağlantı kurar.
- UDP soketleri, güvenilir olmayan, verimliliği yüksek ve hızlı veri transferi için kullanılır. Paketler belirli bir sıraya göre gönderilmez, ancak bağlantı oluşturma işlemi gerekmez.
Soket programlamada, bir soket ayrıntıları belirlenmiş olan bir sunucunun IP adresi ve port numarası aracılığıyla bağlanır. Soket programlaması hatasız yapılması zor bir programlama türüdür ancak öğrenildiğinde son derece faydalıdır.
Socket Türleri Nelerdir?
Socket programlama, TCP ve UDP gibi farklı soket türleri kullanılarak gerçekleştirilir. TCP soketleri, güvenilir bir bağlantı sağlar ve verilerin doğru bir şekilde iletildiğinden emin olur. Öte yandan UDP soketleri, daha hızlı bir veri transferi sağlar, ancak güvenilir olmayan bir bağlantı sunar.
TCP soketleri, bir başlangıç ve hedef noktası arasındaki bağlantının her iki tarafında kullanılır. Birçok internet uygulaması, HTTP gibi, TCP soketlerini kullanarak iletişim kurar. UDP soketleri ise tek yönlü iletişim için idealdir ve daha az güvenilir olmalarına rağmen, ses ve video yayını gibi uygulamalarda kullanılabilirler.
TCP ve UDP soketleri arasındaki temel fark, veri transferi için kullanılan protokoldür. TCP protokolü, sıralı ve güvenli bir veri iletimi sağlamak için bir dizi mekanizma sağlar. UDP protokolü ise hızlı bir veri transferi için tasarlanmıştır ve veri paketlerinin doğru zamanda ve sırada teslim edilmesi garanti edilmez.
Tablo olarak bakarsak, TCP soketleri ve UDP soketleri arasındaki farklar şu şekildedir:
TCP Soketleri | UDP Soketleri |
---|---|
Güvenilir bağlantı | Güvenilir olmayan bağlantı |
Sıralı veri iletimi | Sırasız veri iletimi |
Yavaş ancak güvenilir | Hızlı ancak güvensiz |
Çift yönlü iletişim | Tek yönlü iletişim |
Hangi soket türünün kullanılacağı, uygulamaların gereksinimlerine göre değişir. Güvenilir bir veri transferi gerektiren durumlarda, TCP soketleri tercih edilirken, daha hızlı bir veri aktarımı için UDP soketleri kullanılabilir.
Stream Soketleri
Stream soketleri, güvenilir, iki yönlü byte akışı sağlayan bir soket türüdür. TCP/IP protokolünü kullanarak veri transferi gerçekleştiren Stream soketleri, verilerin hedef makineye doğru eksiksiz bir şekilde akmasını sağlar.
Bu tür soketler genellikle dosya aktarımlarında ve ses/video konferans uygulamalarında tercih edilir. Stream soketlerinin temel özellikleri arasında:
- TCP protokolü üzerinden güvenli veri transferi sağlar.
- İki yönlü byte akışı garanti eder, yani hem veri alışverişi yapılıp hem de kontrol mesajları gönderilebilir.
- Veri transferi sırasında önceden belirlenen veri boyutu limitleri yoktur.
- Veri transferi sırasında verilerin eksiksiz bir şekilde alındığı kontrol edilir ve gerekirse tekrar iletilir.
Stream soketleri, özellikle dosya aktarımı yapan uygulamalar için ideal bir tercih olabilir. Örneğin, dosya indiren bir uygulama, alınan her bir parçayı doğru bir şekilde almasını garantiliyor olmalıdır. Stream soketleri, bu tür garanti işlemlerini sağlar ve tüm alınan verilerin doğru bir şekilde aktarılmasını garanti eder.
Datagram Soketleri
Datagram Soketleri, Stream soketlerine göre daha farklı bir veri transfer yöntemidir. Stream soketleri, verileri kesintisiz bir şekilde gönderirken, Datagram soketleri ise verileri paketlere ayırarak gönderir. Bu nedenle, Datagram soketleri, belirli bir boyuttaki paketleri hızlı bir şekilde göndermek için kullanılır.
Datagram soketlerinin kullanım alanları arasında, ses ve video verilerini gönderme, haberleşme protokollerini uygulama gibi işlemler yer alabilir. UDP protokolü üzerinden çalışan Datagram soketleri, bazı özellikleri nedeniyle tercih edilir. Bunlar:
- Veri transferi sırasında fazladan bir protokol kullanılmaz, bu nedenle veri transferi daha hızlıdır.
- Paket kayıplarına karşı yapılan önlemler, Stream soketlerine göre daha basittir.
- Yüksek performanslı uygulamaların geliştirilmesi için idealdir.
Datagram soketleri, Stream soketlerinden farklı olarak, bağlantı gerektirmeden veri transferi yapabilirler. Yani, önce bağlantı kurulması ve ardından veri transferi yapılması gerekmez. Bu nedenle, Datagram soketleri, çok sayıda bağlantı noktasının kullanıldığı uygulamalar için daha uygun olabilir.
Stream Soketleri | Datagram Soketleri |
---|---|
Kesintisiz veri transferi | Paketler halinde veri transferi |
Bağlantı gerektirir | Bağlantı gerektirmez |
TCP protokolü üzerinden çalışır | UDP protokolü üzerinden çalışır |
Datagram soketleri, temel olarak, belirli bir boyuttaki paketleri hızlı bir şekilde göndermek için kullanılır. Özellikle, ses ve video uygulamalarında yaygın olarak kullanılır. Ancak, bazı dezavantajları nedeniyle, belirli kullanım senaryolarına uygun olabilirler.
C# Socket Programlama Nasıl Yapılır?
C# programlama dili ile soket programlama yapmak oldukça kolaydır. Öncelikle soket oluşturulur ve bağlantı kurulur. TCP soketleri üzerinden veri aktarımı, gönderme ve alma işlemleri gerçekleştirilir.
Bunun için öncelikle System.Net.Sockets namespace'ini projemize eklememiz gerekiyor. Ardından soket oluşturmak için Socket sınıfını kullanabiliriz. Socket sınıfının yapıcı metodu ile soket tipi (Stream veya Datagram) belirlenir ve bir IP adresi ve port numarası atanır. Bu sayede soket oluşturulmuş olur.
Soket Oluşturma Kodu |
---|
Socket soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
Bir soket oluşturulduktan sonra, bağlantı kurulması gereken hedef sunucunun IP adresi ve port numarasını belirlememiz gerekiyor. Bunun için bir IPEndPoint oluşturulur ve soket Connect metodu ile hedef sunucuya bağlanılır.
Bağlantı Kurma Kodu |
---|
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 8080);soket.Connect(endPoint); |
Bağlantı kurulduktan sonra veri göndermek veya almak için soket üzerinde işlem yapılabilir. Soket üzerinden veri göndermek için Send metodu kullanılır. Veriyi byte[] bir dizi olarak göndermek gerekir. Veri almak için Receive metodu kullanılır. Bu metot, bir byte[] dizisi ve verinin toplanacağı dizi içindeki başlangıç konumu parametreleri alır. Bu sayede gönderilen veri alınmış olur.
- Veri Gönderme Kodu
Kod |
---|
byte[] veri = Encoding.ASCII.GetBytes("Merhaba Dünya!");soket.Send(veri); |
- Veri Alma Kodu
Kod |
---|
byte[] gelenVeri = new byte[1024];int bytesRead = soket.Receive(gelenVeri, 0, gelenVeri.Length, SocketFlags.None);string data = Encoding.ASCII.GetString(gelenVeri, 0, bytesRead); |
Bu şekilde TCP soketleri üzerinden C# programlama dili ile soket programlama yapabilirsiniz.
Soket Oluşturma ve Bağlantı Kurma
C# programlama dili ile soket programlama yaparken soket oluşturma ve bağlantı kurma işlemleri oldukça önemlidir. Bu işlemler ayrı ayrı adımlar halinde gerçekleştirilir.
Öncelikle, soket oluşturma işlemi yapılır. Bu işlem için Socket()
metodu kullanılır. Bu metot sayesinde yeni bir soket oluşturulur ve soketin özellikleri belirlenir. Oluşturulan soket, istemci veya sunucu olarak kullanılabilir. Soket oluşturma işlemi boyunca, soketin tipi ve bağlantı noktası gibi parametreler belirlenmelidir.
Parametre | Açıklama |
---|---|
AddressFamily | Soketin adres ailesi belirtilir. Örneğin, InterNetwork için AddressFamily.InterNetwork kullanılabilir. |
SocketType | Soketin tipi belirtilir. Örneğin, Stream için SocketType.Stream kullanılabilir. |
ProtocolType | Protokol tipi belirtilir. Örneğin, TCP için ProtocolType.Tcp kullanılabilir. |
Soket oluşturma işlemi tamamlandıktan sonra, bağlantı kurma işlemi gerçekleştirilir. Bu işlem için Connect()
metodu kullanılır. Bu metot sayesinde istemci, sunucuya bağlantı isteği gönderir ve sunucu ile iletişim kurar.
Bağlantı kurma işlemi sırasında, sunucunun IP adresi ve bağlantı noktası gibi bilgiler belirlenir. Bu bilgiler kullanılarak soket, sunucuya bağlanır ve iletişim kurulur. Bağlantı kurulduktan sonra, soket üzerinden veri transferi gerçekleştirilir.
Veri Gönderme ve Alma
Veri gönderme işlemi TCP soketleri üzerinden gerçekleştirilecek olan işlemlerden biridir. Bu işlem için öncelikle kullanılacak olan soket nesnesinin oluşturulması gerekmektedir. Soket nesnesi oluşturulduktan sonra veri gönderme işlemi gerçekleştirilmek istenen hedef adresteki server socket'e bir bağlantı kurulması gerekmektedir.
Bağlantı kurulduktan sonra, veri gönderme işlemi için önce gönderilecek olan verilerin bir byte dizisi olarak hazırlanması gerekmektedir. Hazırlanan byte dizisi, soket nesnesi üzerinde işlem yapılacak olan NetworkStream nesnesine yazılarak hedef adrese gönderilebilir.
Aynı şekilde, veri alma işlemi de yine TCP soketleri üzerinden gerçekleştirilebilir. Veri alma işlemi için öncelikle bağlantı kurulmuş olan bir soket nesnesine ihtiyaç vardır. Bu soket nesnesi üzerinde işlem yapılacak olan NetworkStream nesnesi, soket üzerinden gelen verileri almak için kullanılabilir.
Alınan veriler, NetworkStream nesnesi üzerine yazılarak soket nesnesi üzerinden gelen veriler byte dizisi olarak elde edilebilir. Elde edilen byte dizisi, kullanılacak olan veri tiplerine göre çözümlenerek istenilen veriler elde edilebilir.
Bu işlemler sırasında, TCP soketlerinin özellikleri ve doğru bir şekilde kullanımı önemlidir. Veri gönderme ve alma işlemleri sırasında, bağlantı kopması ya da hatalı veri gönderimi gibi durumlarla karşılaşmak mümkündür. Bu nedenle, geliştirme aşamasında bu konulara da özen gösterilmelidir.
Örnek Bir Uygulama Nasıl Hazırlanır?
Örnek bir soket programlama uygulaması hazırlamak için öncelikle C# programlama dili ile bir proje oluşturulmalıdır. Daha sonra projede TCP soketi oluşturmak için System.Net.Sockets sınıfı kullanılır. Soket oluşturulduktan sonra bağlantı kurulması için bir IP adresi ve port belirtilmelidir.
Aşağıdaki örnek kod bloğunda, soket oluşturma ve bağlantı kurma işlemi yapılmaktadır:
```csharp// Soket oluşturmaSocket soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// İstemciye bağlanmaIPAddress adres = IPAddress.Parse("127.0.0.1");int port = 12345;soket.Connect(adres, port);```
Bu kod bloklarında, InterNetwork adres ailesi ve Stream soket türü kullanılmıştır. Ayrıca, ProtocolType.Tcp ile TCP/IP protokolü seçilmiştir.
Soket oluşturma ve bağlantı kurma işleminden sonra veri gönderme ve alma işlemleri gerçekleştirilebilir. Örneğin, istemciden sunucuya bir metin mesajı göndermek için aşağıdaki kod blokları kullanılabilir:
```csharp// Gönderilecek mesajstring mesaj = "Merhaba, ben istemci!";
// Byte dizisine çevirmebyte[] mesajBytes = Encoding.ASCII.GetBytes(mesaj);
// Mesajı göndermesoket.Send(mesajBytes, mesajBytes.Length, SocketFlags.None);```
Yukarıdaki kod bloklarında, öncelikle gönderilecek mesaj belirlenir ve Encoding.ASCII.GetBytes() yöntemi ile byte dizisine dönüştürülür. Daha sonra soket.Send() yöntemi kullanılarak byte dizisi gönderilir.
Sunucu tarafında ise, gelen mesajı almak için aşağıdaki kod blokları kullanılabilir:
```csharp// Gelen veriyi tutacak byte dizisibyte[] gelenBytes = new byte[1024];
// Verinin okunması ve boyutuint gelenBoyut = soket.Receive(gelenBytes);
// Byte dizisinden string'e çevirmestring gelenVeri = Encoding.ASCII.GetString(gelenBytes, 0, gelenBoyut);```
Bu kod bloklarında, öncelikle gelen mesajı tutacak byte dizisi belirlenir. Daha sonra soket.Receive() yöntemi kullanılarak byte dizisi sunucuya gelen veriyle doldurulur. Son olarak, Encoding.ASCII.GetString() yöntemi kullanılarak byte dizisi string'e dönüştürülür.
Özetle, C# programlama dili ile soket programlama yapmak oldukça kolaydır. Öncelikle soket oluşturulur ve bağlantı kurulur. Daha sonra, veri gönderip alabilmek için soket.Send() ve soket.Receive() yöntemleri kullanılır. Bu yöntemler sayesinde, istemciler ve sunucular arasında veri transferi gerçekleştirilebilir.