برای ایجاد برنامه های سرویس دهنده/سرویس گیرنده بصورت اتصال گرا در سی شارپ ، دو پروژه از نوع کنسول ایجاد می کنیم. یکی از روش های ارتباط و ارسال پیام بین برنامه های سرویس گیرنده وسرویس دهنده استفاده از سوکت می باشد. در این بخش نمونه برنامه هایی زیر برای ساخت برنامه سرویس دهنده از کلاس TcpListener و متد AcceptSocket آن استفاده شده است.
در نمونه برنامه های زیر برای ساخت برنامه سرویس دهنده از کلاس TcpListener و متدد AcceptSocket آن استفاده شده است. این متد یک شی سوکت بر می گرداند که با فراخوانی متدهای Send و Receive آن می توان پیام ها را ارسال و دریافت کرد.
در برنامه سرویس گیرنده هم یک سوکت ایجاد شده و با اتصال به سرویس دهنده با آن پیام رد و بدل می کند . کلاس Socket در سی شارپ متدهای زیر را داراست:
- متد Connect : اتصال به سرویس دهنده
- متد Send : ارسال پیام
- متد Receive: دریافت پیام
- متد Close : بستن ارتباط
لازم به ذکر است هر نوع پیامی برای ارسال در شبکه باید در مبدا از حالت رشته ای به آرایه ای از بایت ها تبدیل شده و در مقصد دوباره به رشته تبدیل گردد.
کد برنامه سرویس دهنده
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; namespace Server1 { class Program { static void Main(string[] args) { IPAddress ip = IPAddress.Parse("192.168.11.30"); int port = 2500; TcpListener s = new TcpListener(ip, port); s.Start(); Console.WriteLine("Server Started.. "); Socket c = s.AcceptSocket(); Console.WriteLine("1 Client connected.. "); byte[] b1 = new byte[80]; b1 = ASCIIEncoding.ASCII.GetBytes("Hello ,please send message:"); c.Send(b1); byte[] b2 = new byte[80]; c.Receive(b2); Console.WriteLine( ASCIIEncoding.ASCII.GetString(b2) ); c.Close(); Console.ReadKey(); } } }
کد برنامه سرویس گیرنده :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; namespace Client { class Program { static void Main(string[] args) { // ایجاد ارتباط // TCP // با استفاده از سوکت string msg; Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream , ProtocolType.Tcp); c.Connect("192.168.11.30", 2500); byte[] b1 = new byte[80]; c.Receive(b1); Console.Write( ASCIIEncoding.ASCII.GetString(b1) ); msg = Console.ReadLine(); byte[] b2 = new byte[80]; b2 = ASCIIEncoding.ASCII.GetBytes(msg); c.Send(b2); c.Close(); } } }
در صورت اجرای برنامه ها، ابتدا یک پیغام از سرویس گیرنده به سرویس دهنده فرستاده شده و سپس سرویس دهنده با فرستان یک پیام تائید به سرویس گیرنده اطلاع می دهد