C# Multi Threaded Socket Programlama ile basit bir Server Client Uygulaması 1

csharp

Bu yazımızda Multi Threaded Socket Programlama ile basit bir uygulama nasıl yapabiliriz onu göstereceğim.

Uygulamamız bir server birde client programdan oluşacak.

İlk olarak yeni bir Windows Form Application Projesi başlatıyoruz. Form1’i sildikten sonra Forms adında yeni bir klasör oluşturup bu klasörün altına Main adında bir form ekliyoruz.

Daha sonra ise ConsoleMode Adında bir class’ı da projemize dahil ediyoruz.

th01

Program.cs’yi açıp içerisinde aşağıdaki gibi bir düzenleme yapıyoruz.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Diagnostics;

using Microsoft.Win32;

Program classını ise

static class Program

{

[DllImport("kernel32.dll", SetLastError = true)]

static extern bool AllocConsole();

[DllImport("kernel32.dll", SetLastError = true)]

static extern bool FreeConsole();

[DllImport("kernel32", SetLastError = true)]

static extern bool AttachConsole(int dwProcessId);

[DllImport("user32.dll")]

static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll", SetLastError = true)]

static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main(string[] args)

{

string mode = args.Length > 0 ? args[0] : "gui";//Argüman boş ise mode gui yapılıyor.

if (mode.ToLower() == "gui")

{

ModeGui();

}

else if (mode.ToLower() == "console")

{

IntPtr ptr = GetForegroundWindow();

int u;

GetWindowThreadProcessId(ptr, out u);

Process process = Process.GetProcessById(u);

if (process.ProcessName == "cmd")    //console modunda uygulama cmd ekranında mı çalıştırıldı?

{

AttachConsole(process.Id);

ModeConsole();

}

else

{

//Yeni console oluşturuluyor...

AllocConsole();

ModeConsole();

}

FreeConsole();

}

}

static void ModeGui()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Forms.Main());

}

static void ModeConsole()

{

new ConsoleMode();

}

}

Main metodunda gerçekleşen işlemleri de özetlersek gelen argümana göre uygulamamız console veya gui modunda başlamasına karar veriyor. Seçime göre static void ModeGui() veya static void ModeConsole() metodlarından birini tetikliyor.

Daha sonra uygulamamıza DebugConsole .DLL adlı DLL’i referans olarak ekliyoruz.
Şuana kadar Socket Programlama ve Threading adına pek bir şey yapmadık ama uygulamamız için bir alt yapıya ihtiyacımız var.
Aşağıdaki tasarımı yaptıktan sonra artık Server kodlarına geçebiliriz.

th02

Yazının devamı için tıklayınız.

  • Pingback: C# Multi Thread Socket Programlama ile basit bir Server Client Uygulaması 2 « Orkun Uçan()

  • Pingback: C# Multi Thread Socket Programlama ile basit bir Server Client Uygulaması 3 « Orkun Uçan()

  • o_o User

    Oncelikle iyi gunler hocam. multi threaded socket uygulaması verileri lan üzerindenmi yoksa internet üzerinden mi gönderiyor. Eger internet uzerindense modem de degistirmem gereken ayarlar varmi ( port acma gibi). Eger internet üzerinden degil ise internet uzerinden veri yollayabilecegim bir programi nasıl yapabilirim. Aradan baya zaman geçmiş ama ilgilenirseniz gerçekten minnettar olacağım.

    • Öncelikle yorumun için teşekkürler o_o User. Ağ üzerinden haberleşme temelde aynı. Internet de geniş bir yerel ağ. Burda önemli olan konu örnekte kullandığımız 8000 numaralı portu modeminden kullandığın bilgisayarın için açman ve güvenlik duvarını kapatman. Portun açık olup olmadığını http://www.yougetsignal.com/tools/open-ports/ sitesi üzerinden kontrol edebilirsin(Port olarak 8000 yazmayı unutma sakın). Sonra http://whatismyipaddress.com buradan ip adresini öğrenip not al.Son aşama olarak farklı bir modeme bağlı farklı bir bilgisayardan client programı ile bağlantı kurup veri gönderip alabilirsin.

      • Humaku

        Peki client veri alip “yollayabiliyorsa” client programının oldugu bilgisayarin da portunu acmak gerekmiyor mu?

        • Bağlantı client tarafından açıldığı için client uygulamayı çalıştıran bilgisayarda port açmaya gerek yok. Bu işlem client uygulamayı çalıştıran bilgisayar için otomatik olarak gerçekleşecektir.

      • Humaku

        Hocam ilgilendiginiz icin gerçekten tesekkur ederim. Bilgisayara gecer gecmez kod yazmaya ışık hızıyla basliyacagim. 😀