در این قسمت ساختار و مراحل ایجاد یک برنامه client/server بدون اتصال (UDP) با استفاده از سوکت ها توضیح داده شده است. و فایل های یک پروژه سرور و کلاینت ضمیمه شده است. این پروژه برنامه نویسی شبکه با سی شارپ تست و اجرا شده است.
برای ایجاد یک برنامه بدون اتصال (UDP) با استفاده از سوکت ها، برنامه نویس باید در برنامه سرور دو عمل زیر را انجام دهد:
1- ساخت یک شیء از نوع سوکت
2- مقید کردن سوکت به یک IpEndPoint
بعد از این سوکت می تواند به ارسال و دریافت داده ها بپردازد. در اینجا برای ارسال و دریافت داده ها از متدهای SendTo و ReceiveFrom استفاده می کند.
سوکت اطلاعات را همیشه بصورت آرایه ای از بایت ها ارسال و دریافت می کند.
– متد SendTo : برای ارسال داده ها استفاده شده و دارای شکل کلی زیر است:
SendTo(byte[] data , int offset , int size , SocketFlags flags , EndPoint remote)
– متد ReceiveFrom : برای دریافت داده ها استفاده شده و شکل کلی زیر را دارد:
ReceiveFrom(byte[] data ,ref EndPoint remote)
یادآوری: برای ساخت سوکت از نوع بدون اتصال بصورت زیر عمل می کنیم:
Socket نام دلخواه = new Socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp)
نوشتن یک برنامه کلاینت سرور از نوع UDP با socket :
در مثال زیر یک ارتباط ساده بین سرور و کلاینت ایجاد شده به طوری که کلاینت داده ای ارسال و سرور دریافت می کند. نیاز به نوشتن دو برنامه داریم. یک برنامه در سمت سرور باید نوشته شود و برنامه دیگر در کلاینت نوشته و اجرا شود.
برنامه سرویس دهنده:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace Server1 { class Program { static void Main(string[] args) { Console.WriteLine("In Server"); IPAddress ip = IPAddress.Parse("192.168.100.233"); int port = 2500; IPEndPoint iep = new IPEndPoint(ip, port); Socket server; server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); server.Bind(iep); byte[] b = new byte[255]; EndPoint ep = (EndPoint)iep; server.ReceiveFrom(b, ref ep); Console.WriteLine(ASCIIEncoding.ASCII.GetString(b)); Console.ReadKey(); } } }
برنامه سرویس گیرنده:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace Client1 { class Program { static void Main(string[] args) { Console.WriteLine("In Client"); IPAddress ip = IPAddress.Parse("192.168.100.233"); int port = 2500; IPEndPoint iep = new IPEndPoint(ip, port); Socket client; client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); client.Connect(iep); client.SendTo(ASCIIEncoding.ASCII.GetBytes("Msg From Client"), iep); Console.ReadKey(); } } }