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.