سلام دوست گرامی
برای فهم بهتر مفهوم سوکت و سوکت پروگرامینگ متن زیر رو مطالعه کنید:
برای ارتباط بین پردازش های مختلف روی یک هاست سیستم عامل از ارتباط بین پردازشی استفاده می کنه. اما اگه دو پردازش روی دو هاست مختلف باشن ارتباط بین اونها با استفاده از پاس کاری پیام بین هر دو انجام میشه. به پردازشی که ارسال پیام رو شروع می کنه پردازش کلاینت و به پردازشی که جواب پردازش کلاینت رو می ده پردازش سرور می گوئیم.
به طور کلی دو نوع پیام داریم: پیام درخواست – پیام جواب. پردازش کلاینت پیام درخواست رو به پردازش سرور میفرسته و پردازش سرور در جواب پیام جواب رو به پردازش کلاینت میفرسته.
پاس کاری پیام بین پردازش کلاینت و پردازش سرور بوسیله سوکت ها انجام میشه. سوکت ارتباط بین پردازش و پروتکل مورد استفاده در شبکه برای پاس کاری پیام رو برقرار می کنه (مثل tcp). در واقع سوکت یک در بین پردازش و پروتکل انتقال پیام هست. هم پردازش سرور و هم پردازش کلاینت یک سوکت برای خود دارند.
اما خوب هر پردازش برای شناسایی شدن در شبکه یک شماره منحصر به فرد داره که از ترکیب آدرس IP هاستی که پردازش درش قرار داره و شماره پورت متصل به پردازش تشکیل میشه.
اگر پروتکلی که استفاده می کنید tcp باشه روال پاس کاری پیام به این صورت هست:
۱- پردازش سرور قبل از پردازش کلاینت اجرا میشه و بعد پردازش کلاینت اجرا میشه.
۲- پردازش کلاینت با پردازش سرور تماس میگیره. برای این کار پردازش کلاینت باید یک سوکت برای خود بسازه و در آن شماره IP سرور و شماره پورت پردازش سرور رو مشخص کنه.
۳- سرور یک سوکت برای پردازش سرور ایجاد میکنه تا این پردازش بتونه با پردازش کلاینت پیام پاس کاری کنه. به ازاء هر کلاینت که بخواد پیام پاس کاری کنه، سرور یک سوکت ایجاد میکنه.
۴- بعد از اینکه ارتباط برقرار شد، کلاینت پیام درخواست به سوکت پردازش سرور ارسال می کنه، سرور اونو میخونه و پردازش میکنه، در جواب سرور هم پیام جواب رو برای پردازش کلاینت میفرسته. کلاینت پیام رو میخونه. اگه درخواست جدیدی داشته باشه همین روال درخواست و جواب ادامه پیدا می کنه وگرنه سوکت رو میبنده. در نهایت سرور هم سوکت رو میبنده.
برای پیاده سازی این نرم افزار با زبان سی شارپ بدین طریق عمل کنید:
یک پروژه برای برنامه کلاینت و یک پروژه دیگر برای برنامه سرور بسازید. برای نگهداری کاربران از بانک اطلاعاتی استفاده کنید. بانک اطلاعاتی بر روی سرور نگهداری میشود.
در برنامه کلاینت، اگر خواستید می توانید از تشخیص هویت استفاده کنید و کلاینت حتما باید یک نام کاربری و کلمه عبور برای ورود داشته باشد. (در صورتی که یک کلاینت و یک سرور دارید اختیاری است و در صورتی که کلاینتها بیشتر باشد بهتر است).
بعضی از کدهایی که کمکتون می کنه اینا هستن:
برای شروع ارسال پیام از طرف برنامه کلاینت این کد را بنویسید:
کد:
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Specifying IP Address Of Server
IPAddress ipAddress = IPAddress.Parse("192.168.0.1");
// Specifying Port Number Of Server Socket
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1000);
// Connecting To Server Socket
clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
کد واضح است. تنها خط آخر بیان می کند که بعد از وصل شدن به سرور باید متد OnConnect اجرا شود که باید در آن پیام هایی که می خواهید برای سرور بفرستید را مشخصی کنید و دستورات لازم دیگر برای ارسال پیام و قالب پیام هم باید مشخص شوند.
در برنامه سرور با استفاده از کلاس Socket کد زیر را در رویداد Load صفحه بنویسید:
کد:
// Creating Server Socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
// Specify IP Address and Port Number 1000
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1000);
// Binding ipEndPoint to Socket and Listen to Port
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(4);
// Accepting Clients
serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);
کد واضح است. تنها خط آخر کد بیان می کند که در صورتی که یک پیام درخواست از طرف کلاینت رسید متد OnAccept رو به صورت نامتقارن فراخوانی کن. این متد را باید پیاده سازی کنید و بیان کنید که به ازاء این کلاینت یک سوکت جدید ایجاد شود. در همین حین به صورت نامتقارن به درخواست کلاینتهای دیگر گوش دهیم و درنهایت پیام را از همین کلاینت دریافت کنیم.
مطالب تئوری رو از اسلاید فصل دوم این کتاب ترجمه کردم: (اسلایدهاش free بودن موقع ما)
کد:
Computer Networking: A Top Down Approach,
۴th edition.
Jim Kurose, Keith Ross
Addison-Wesley, July 2007.
کدهای سی شارپ هم از یکی از دوستان گرفته شده.
التماس دعا
موفق باشید