وباکا

آموزش تخصصی برنامه نویسی وب

برنامه نویسی سرویس دهنده/سرویس گیرنده شبکه بدون اتصال (UDP)

در این قسمت ساختار و مراحل ایجاد یک برنامه 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();
        }
    }
}

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب