Bu yazıda C# soket programlamayı öğreneceğiz. İlk olarak, bir C# soketinin nasıl oluşturulacağını ve önceden tanımlanmış IP ve protokol aracılığıyla gelen mesajları dinlemeye başlayan bir dinleyici düğümünün nasıl kurulacağını göreceğiz. Ayrıca bir dinleyiciye mesaj gönderecek ve Sockets kullanarak okuyacak bir istemci uygulamasının nasıl oluşturulacağını da göreceğiz. Örnek kod C# ve .NET Core ile yazılmıştır.
Soket Programlama Nedir?
Bilgisayar ağlarındaki soketler, iki veya daha fazla bilgisayar arasında bağlantı kurmak ve bir bilgisayardan diğerine veri göndermek için kullanılır. Ağdaki her bilgisayara düğüm denir. Soketler, güvenli bir iletişim kanalı oluşturmak için düğümlerin IP adreslerini ve bir ağ protokolünü kullanır ve verileri aktarmak için bu kanalı kullanır.
Soket iletişiminde, bir düğüm dinleyici, diğer düğüm ise istemci görevi görür. Dinleyici düğümü, önceden belirlenmiş bir IP adresine ve önceden tanımlanmış bir protokole göre kendini açar ve dinlemeye başlar. Sunucuya mesaj göndermek isteyen istemciler aynı IP adresi ve aynı protokol üzerinden mesaj yayınlamaya başlarlar. Tipik bir soket bağlantısı, iletişim kurmak için İletim Kontrol Protokolünü (TCP) kullanır.

C# Soket Programlama Örnek Uygulama
Bu yazıda, bir soketin nasıl oluşturulacağını ve önceden tanımlanmış IP ve protokol aracılığıyla kendisine gelen mesajları dinlemeye başlayan bir dinleyici sunucu düğümünün nasıl kurulacağını göreceğiz. Dinleyici sunucuya mesaj gönderecek ve okuyacak bir istemci uygulamasının nasıl oluşturulacağını da göreceğiz.
Örnek kod C# ve .NET Core ile yazılmıştır.
Adım 1 – Bir Listener Oluşturun
Bir .NET Core Console uygulaması açıp aşağıdaki kodları yazın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Sunucu { class Program { static void Main(string[] args) { SunucuBaslat(); } public static void SunucuBaslat() { // Bağlantı kurmak için kullanılan Host IP Adresini al // Bu durumda, localhost'un bir IP adresi olan IP'yi alıyoruz: 127.0.0.1 // Bir ana bilgisayarın birden fazla adresi varsa, bir adres listesi alırsınız IPHostEntry host = Dns.GetHostEntry("localhost"); IPAddress ipAdres = host.AddressList[0]; IPEndPoint localBitisNoktasi = new IPEndPoint(ipAdres, 11000); try { // Tcp protokolünü kullanacak bir Socket oluşturun Socket listener = new Socket(ipAdres.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Bir Soket, Bind yöntemi kullanılarak bir uç nokta ile ilişkilendirilmelidir listener.Bind(localBitisNoktasi); // Bir Socket'in Sunucu meşgul yanıtı vermeden önce kaç istek dinleyebileceğini belirtin. // Bir seferde 10 istek dinleyeceğiz listener.Listen(10); Console.WriteLine("Bağlantı bekleniyor..."); Socket isleyici = listener.Accept(); // İstemciden gelen veriler. string data = null; byte[] bytes = null; while (true) { bytes = new byte[1024]; int bytesRec = isleyici.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, bytesRec); if (data.IndexOf("<EOF>") > -1) { break; } } Console.WriteLine("Metin Alındı : {0}", data); byte[] msg = Encoding.ASCII.GetBytes(data); isleyici.Send(msg); isleyici.Shutdown(SocketShutdown.Both); isleyici.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.WriteLine("\n Devam etmek için herhangi bir tuşa basın..."); Console.ReadKey(); } } } |
Adım 2 – Bir İstemci Oluşturun
İstemci uygulaması, bir sunucu/dinleyici ile bağlantı kuran ve mesaj gönderen uygulamadır. Başka bir .NET Core Console uygulaması oluşturun ve aşağıdaki kodu yazın.
Örnek kod, verilen IP ve porttaki dinleyici ile bir soket bağlantısı oluşturan ve bir mesaj gönderen bir istemci uygulaması oluşturur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Istemcim { class Program { static void Main(string[] args) { IstemciBaslat(); Console.ReadLine(); } public static void IstemciBaslat() { byte[] bytes = new byte[1024]; try { // Uzak sunucuya bağlan // Bağlantı kurmak için kullanılan Host IP Adresini al // Bu durumda, localhost'un bir IP adresi olan IP'yi alıyoruz: 127.0.0.1 // Bir ana bilgisayarın birden fazla adresi varsa, bir adres listesi alırsınız IPHostEntry host = Dns.GetHostEntry("localhost"); IPAddress ipAdres = host.AddressList[0]; IPEndPoint uzakEP = new IPEndPoint(ipAdres, 11000); // Bir TCP/IP soketi oluşturun. Socket sender = new Socket(ipAdres.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Soketi uzak uç noktaya bağlayın. Herhangi bir hatayı yakalayın. try { // Uzak Uç Noktaya Bağlan sender.Connect(uzakEP); Console.WriteLine("Soket Bağlandı {0}", sender.RemoteEndPoint.ToString()); // Veri dizesini bir bayt dizi olarak kodlayın. byte[] mesaj = Encoding.ASCII.GetBytes("Bu mesaj <EOF>"); // Verileri soket üzerinden gönderin. int bytesSent = sender.Send(mesaj); // Uzak cihazdan yanıtı alın. int bytesRec = sender.Receive(bytes); Console.WriteLine("Test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); // Soket bağlantısını bırak sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch (ArgumentNullException ane) { Console.WriteLine("ArgumentNullException : {0}", ane.ToString()); } catch (SocketException se) { Console.WriteLine("SocketException : {0}", se.ToString()); } catch (Exception e) { Console.WriteLine("Unexpected exception : {0}", e.ToString()); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } } |