برنامه نویسی سوکت Socket Programming

Slides:



Advertisements
Similar presentations
Awe sim.
Advertisements

معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
فاکتورهای مهم در ایجاد یک مقاله علمی
Professor: Dr. Ahmad Abdollahzadeh Amirkabir University of Technology, Computer Engineering and Information Technology Department Intelligent Systems Laboratory.
محدثه گل پرور, ملاحت ملکی استاد راهنما : مهندس برادران هاشمی.
Decision Tree.
مراحل مختلف اجرای يک برنامه
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
Network Layer Programing Connection-Oriented Sockets SWE 344 Internet Protocols & Client Server Programming.
انواع Middleware و معرفی دو نمونه
1 Network Address Translation (NAT). 2 Private Network شبکه خصوصی شبکه ای است که بطور مستقیم به اینترنت متصل نیست در یک شبکه خصوصی آدرس های IP به دلخواه.
Windows Programming Using C# Internet Programming.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
به نام خدا برنامه سازی سمت سرور (php)
Network Programming with C# Exceed Camp #2, CPE, KU Day 3.
Connectionless Sockets SWE 344 Internet Protocols & Client Server Programming.
تکنیک های پیشرفته در برنامه سازی وب ) اسلايد هفتم ) جوانمرد Website: به نام خدا.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 9 Selected Topics.
IP multicasting SWE 344 Internet Protocols & Client Server Programming.
In the next lectures you will learn  What is SQL  How to access mySQL database  How to create a basic mySQL database  How to use some basic queries.
12/5/2015.net 1 system.net Contains any network functionallity you would need in c# Several sub namespaces exists to allow for more fined control –System.Net.Sockets.
موضوع: دبير مربوطه: آموزشگاه : اجرا : عبارتهای جبری خانم مقصودی
مظفر بگ محمدی دانشگاه ایلام Generics. کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا.
Data Types Modifiers Base data type Size Sign signed int 2 B unsigned float 4 B short double 8 B long char 1 B.
CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Advanced.NET Programming I 14 th Lecture Pavel Ježek
پیاده سازی کنترلر PC/104. Contents PC/104 پیاده سازی کنترلر HILتست 1.
آشنايي با سيستم اعداد.
تنظیم مودم Triz به حالت NAT
فایل ها.
به نام خدا.
[c.
Sockets.
تمرین هفتم بسم الله الرحمن الرحیم درس یادگیری ماشین محمدعلی کیوان راد
هیدروگراف(Hydrograph) تهیه : دکتر محمد مهدی احمدی
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
اسلایدهای فصل سوم کتاب سیلبرشاتز دانشکده مهندسی کامپیوتر دانشگاه شریف
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
استانداردهای تصاویر دیجیتال پزشکی با فرمت دایکام DICOM در سیستم PACS
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
Route configuration for 5400W ADSL Router
مهندسی فناوری اطلاعات ارائه دهنده دکتر سيد امين حسيني
شبکه های کامپیوتری 2 درس اول چند پخشی.
SSO Single Sign-on Systems
آشنایی با پایگاه داده mysql
آموزش کرک کردن نرم افزار ACTIVE HDL
網路程式設計 - C# 版 日期 : 2018/12/4.
ASP.NET فرناز شریعت.
مهندسی فناوری اطلاعات ارائه دهنده دکتر سيد امين حسيني
شبکه های کامپیوتری پیشرفته
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
سوکت (ارتباط بین کاربردها)
راهنمای استفاده از ابزار Mailings در Ms Word
پشته و صف پیوندی Give qualifications of instructors: DAP
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
کاربرد کامپیوتر در داروخانه
مظفر بگ محمدی دانشگاه ایلام
به نام خدا Koha برنامه.
پروتکلها و استانداردهای وب (فصل نهم)
فصل ششم مدارهای ترتیبی.
فایروال در میکروتیک استاد نادری محسن بیاتانی دانشگاه قم
دکتر مظفر بگ محمدی دانشگاه ایلام
Uniprocessor Scheduling
فصل 8 –Process and Deployment
نسبت جرم فرمولی ”جرم اتمی و فرمول تجربی
پشته و صف پیوندی Give qualifications of instructors: DAP
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
Presentation transcript:

برنامه نویسی سوکت Socket Programming

برنامه شبکه هر برنامه شبکه از دو بخش تشکیل شده سرور (خدمات دهنده) آدرس مشخصی دارد منتظر درخواست است مشتری (خواهان خدمات) آدرس مشخص ندارد درخواست خود را به سرور می دهد سوکت برکلی یک روش استاندارد برای برنامه شبکه

گامهای برنامه شبکه (سرور TCP) ایجاد سوکت نسبت دادن آدرس انتظار برای تقاضا و مدیرت تقاضا پذیرش تقاضا انجام تقاضا ارسال و دریافت پایان تقاضا پایان انتظار و صف کردن تقاضا

گامهای برنامه شبکه (مشتری TCP) ایجاد سوکت ارسال تقاضا به سرور انجام تقاضا پایان تقاضا مثال از برنامه شبکه

Server Client Socket Socket Bind Listen تعامل Accept Close Close Connect Connect Msg Listen Ack msg Accept Send/Receive Send/Receive Close Close

مفاهیم سوکت آدرس آی پی شماره پورت مفهومی انتزاعی برای دسترسی به امکانات لایه انتقال آدرس آی پی مشخص کننده آدرس کامپیوتری که سرور روی آن قرار دارد شماره پورت مشخص کننده برنامه ای که روی سرور اجرا می شود

نوع داده های مورد نیاز سوکت گوش دهنده System.Net.Sockets.TcpListener برای گوش دادن به درخواستها سوکت معمولی (کلاس سوکت در این فضای نام قرار دارد) System.Net.Sockets.Socket سوکت مشتری System.Net.Sockets.TcpClient

Socket(AddressFamily af, SocketType st,ProtocolType pt) برای IP نرمال باید از مقدار AddressFamily.InterWork استفاده کنیم. SocketType: نوع ارتباط داده ها را مشخص می کند Dgram UDP Stream TCP Raw ICMP ProtocolType: نوع پروتکل شبکه را مشخص می کند

برنامه سمت کاربر byte[] data = new byte [2048]; string input, stringData; IPEndPoint ipep = new IPEndPoint (IPAddress.Parse("127.0.0.1"), 5060); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); server.Connect(ipep); int recv = server.Receive(data); stringData = Encoding.ASCII.GetString(data, 0, recv); textBox1.Text = stringData;

برنامه سمت سرور IPAddress ip; IPEndPoint ie; byte[] data = new byte[2048]; ip = IPAddress.Parse("127.0.0.1"); ie=new IPEndPoint(ip,5060); Socket s=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Bind(ie); s.Listen(6); Socket client = s.Accept(); IPEndPoint clientEp = (IPEndPoint)client.RemoteEndPoint; string welcome = "Welcome to my test server"; data = Encoding.ASCII.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None);

جریان و تبادل داده ها جریان StreamReader StreamWriter System.Net.Sockets.NetworkStream StreamReader برای خواندن از جریان StreamWriter برای نوشتن در جریان

توابع ایجاد System.Net.Sockets.TcpListener : بر اساس شماره پورت TcpListener listener = new TcpListener(local_port); شروع انتظار برای اتصال listener.Start();

گامهای سمت سرور دریافت تقاضا Socket soc = listener.AcceptSocket(); ایجاد جریان برای انجام تقاضا Stream s = new NetworkStream(soc); بستن جریان s.Close(); بستن سوکت soc.Close();

گامهای سمت مشتری Client. Connect("127.0.0.1", 2030); ایجاد System.Net.Sockets.TcpClient براساس شماره پورت و آدرس آی پی سرور TcpClient client = new TcpClient(host, port); تقاضای اتصال Client. Connect("127.0.0.1", 2030); ایجاد جریان برای انجام تقاضا Stream s = client.GetStream() بستن جریان s.Close(); بستن سوکت مشتری client.Close();

توابع مربوط به انجام تقاضا ابتدا یک جریان از اتصال شبکه می گیریم: Stream s = new NetworkStream(soc); سپس جریانهای نوشتن و خواندن آنرا مشخص می کنیم: StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); برای ارسال کافیست: sw.WriteLine(“رشته”); sw.Flush(); برای دریافت کافیست: sr.ReadLine();

برنامه سرور using System; using System.Threading; using System.IO; using System.Net; using System.Net.Sockets; using System.Configuration; class EmployeeTCPServer{ static TcpListener listener; const int LIMIT = 5; //5 concurrent clients

برنامه سرور public static void Main(){ listener = new TcpListener(2055); listener.Start(); for(int i = 0;i < LIMIT;i++){ Thread t = new Thread(new ThreadStart(Service)); t.Start(); } public static void Service(){ while(true){ Socket soc = listener.AcceptSocket(); try{ Stream s = new NetworkStream(soc); StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); sw.AutoFlush = true; // enable automatic flushing sw.WriteLine("{0} Employees available", ConfigurationSettings.AppSettings.Count);

برنامه سرور while(true){ string name = sr.ReadLine(); if(name == "" || name == null) break; string job = ConfigurationSettings.AppSettings[name]; if(job == null) job = "No such employee"; sw.WriteLine(job); } s.Close(); }catch(Exception e){ soc.Close();

برنامه مشتری using System; using System.IO; using System.Net.Sockets; class EmployeeTCPClient{ public static void Main(string[] args) { TcpClient client = new TcpClient(args[0],2055); try{ Stream s = client.GetStream(); StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); sw.AutoFlush = true; Console.WriteLine(sr.ReadLine()); while(true){ Console.Write("Name: "); string name = Console.ReadLine(); sw.WriteLine(name); if(name == "") break; Console.WriteLine(sr.ReadLine()); } s.Close(); }finally{ client.Close(); } } }

گامهای برنامه سرور در UDP ایجاد سوکت نسبت دادن آدرس انجام تقاضا ارسال و دریافت پایان تقاضا پایان کار سوکت

گامهای برنامه مشتری در UDP ایجاد سوکت انجام تقاضا ارسال و دریافت پایان کار سوکت

برنامه نویس باید دو کار برای برنامه سمت سرور انجام دهد: ساخت یک شی از نوع سوکت مقید کردن سوکت به یک IPEndPoint بعد از این شما می توانید به ارسال و دریافت داده بپردازید، اما شما برای ارسال و دریافت نمی توانید از متد های Receive() و Send() استفاده کنید بلکه باید از دو متد جدید ReceiveFrom() و SendTo() استفاده کنیم.

شکل کلی متد بصورت زیر است: SendTo(byte[] data,int Offset,int Size,SocketFlags, Flags,EndPoint Remote) ReceiveFrom(byte[] data, ref Endpoint Remote)

Server program int recv; byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); newsock.Bind(ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine("Message received from {0}:", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); string welcome = "Welcome to my test server"; data = Encoding.ASCII.GetBytes(welcome);

newsock. SendTo(data, data. Length, SocketFlags newsock.SendTo(data, data.Length, SocketFlags.None, Remote); while (true) { data = new byte[1024]; recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); newsock.SendTo(data, recv, SocketFlags.None, Remote); }

Client Program byte[] data = new byte[1024]; string input, stringData; IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050); Socket server = new Socket ( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "Hello, are you there?"; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)sender; data = new byte[1024]; int recv = server.ReceiveFrom(data, ref Remote); Console.WriteLine("Message received from {0}:", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

Console.WriteLine("Stopping client"); server.Close(); while (true) { input = Console.ReadLine(); if (input == "exit") break; server.SendTo(Encoding.ASCII.GetBytes(input), Remote); data = new byte[1024]; recv = server.ReceiveFrom(data, ref Remote); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); } Console.WriteLine("Stopping client"); server.Close();

Broad Cast در واقع زمانی که بخواهید یک پیغام را برای همه ی کامپیوتر های شبکه تا یک محدوده مجاز ارسال کنید به این کار Broad Cast می گویند. برای ارسال Broad Cast نمی توان از پروتکل TCP استفاده کرد زیرا در TCP ارتباط دو دستگاه باید خصوصی باشد، بدین ترتیب از UDP استفاده می گردد. انواع Broad Cast : Local Broad Cast Global Broad Casr

Client 1 Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050); byte[] data = Encoding.ASCII.GetBytes("This is a test message"); sock.SendTo(data, iep); sock.Close();

Client 2 Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050); IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.0.255"), 9050); byte[] data = Encoding.ASCII.GetBytes("This is a test message"); sock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName. Broadcast, 1); sock.SendTo(data, iep1); sock.SendTo(data, iep2); sock.Close();

Server byte[] data = new byte[1024]; Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); sock.Bind(iep); EndPoint ep = (EndPoint)iep; byte[] data = new byte[1024]; int recv = sock.ReceiveFrom(data, ref ep); string stringData = Encoding.ASCII.GetString(data, 0, recv); data = new byte[1024]; recv = sock.ReceiveFrom(data, ref ep); stringData = Encoding.ASCII.GetString(data, 0, recv); sock.Close();