برنامه‌نويسي شبكه در NET. (بخش دوم) اتصال از طريق نقطه تماس

 

قبل از هر چيزي براي اين‌كه برنامه‌اي در يك شبكه مورد استفاده قرار بگيرد، به يك Server (خدمت‌دهنده) و Client (خدمت‌گيرنده) نياز داريم. در برنامه Server ارتباط روي يك پورت خاص باز كرده و منتظر مي‌مانيد تا يك كلاينت روي آن پورت به شما وصل شود، سپس به انتقال اطلاعات مي‌پردازد.حالا مي‌خواهيم تمامي مطالب مورد نظر را به صورت كد بنويسيم و بررسي كنيم اين سناريو توسط NET. چگونه قابل پياده‌سازي است.در مرحله اول با وصل شدن به يك Server آشنا مي‌شويم؛ اين سرور يك آدرس IP است كه مي‌توانيد مانند مثال هفته پيش از روي نام دامين آن، اين آدرس را به دست بياوريد يا اين‌كه آن را به صورت دستي وارد كنيد. به مثال زير دقت كنيد:

IPAddress test1 = IPAddress.Parse("192.168.1.1");

كد بالا از روي يك آدرس IP كه به صورت يك رشته متني است يك شيء از كلاس IPAddress مي‌سازد.

سپس بايد يك نقطه اتصال با توجه به آدرس IP كه در بالا به دست آورديم و يك پورت خاص ايجاد كنيم.

IPEndPoint ie = new IPEndPoint(test1, 8000);

در اينجا از روي IP و پورت مورد نظر يك نقطه اتصال ايجاد مي‌كنيم.

سپس بايد يك Socket‌ كه نشان‌دهنده سرور ما است ايجاد كنيم. به كد زير دقت كنيد:

Socket newserver = new Socket(AddressFamily.InterNetwork,

SocketType.Stream, ProtocolType.Tcp);

newserver.Bind(ie);

newserver.Listen(5);

Socket newclient = newserver.Accept();

ابتدا يك شيء از كلاس Socket مي‌سازيم و به سازنده آن سه مقدار مي‌دهيم كه هر كدام مشخص‌كننده يك خاصيت از اين شيء بوده كه به صورت زير است:

AddressFamily: مشخص‌كننده شماي آدرس‌دهي يك شيء Socket است.

SocketType: مشخص مي‌كند ارتباط با اين Socket‌ به چه صورت خواهد بود.

ProtocolType: نوع پروتكل مورد نظر براي انتقال اطلاعات را مشخص مي‌كند كه از نوع Tcp/IP باشد يا Udp.

بعد از اين‌كه يك شيء از كلاس Socket ايجاد كرديم، آن را به نقطه تماس يعني ie متصل مي‌كنيم؛ ‌يعني تمامي درخواست‌ها روي آن نقطه تماس توسط اين سرور قابل دريافت و پردازش است.سپس بايد به سرور بگوييم منتظر برقراري يك ارتباط از سوي يك كلاينت باشد. براي اين‌كار از الگوي Listen استفاده مي‌كنيم. اين الگو كه يك پارامتر از نوع عدد صحيح دريافت مي‌‌كند مشخص مي‌سازد سرور تا چه تعداد ارتباط از سمت كلاينت‌ها را مي‌تواند قبول كند. در مثال بالا عدد ۵ نشان‌دهنده اين است كه حداكثر پنج ارتباط مي‌تواند با اين سرور برقرار شود.سپس بايد ارتباط‌هايي را كه با سرور برقرار مي‌شود مديريت كنيم. براي اين كار مي‌توانيم به صورت زير عمل كنيم:

Socket newclient = newserver.

Accept();

وقتي متد درخواست ارتباط براي يك سرور فرستاده شود، با متد Accept آن‌را قبول مي‌كنيم، سپس يك شيء از كلاس Socket برمي‌گرداند كه نشان‌دهنده يك كلاينت است و از طريق آن مي‌توانيد اطلاعات را از كلاينت بخوانيد يا به آنها دسترسي داشته‌باشيد.براي ارسال اطلاعات مي‌توان از متد Send استفاده كرد؛ اين متد يك ارائه از byte‌ها را براي سرور يا يك كلاينت يا به صورت كلي براي يك Socket‌ ديگر ارسال مي‌كند.براي بازيابي اطلاعات مي‌توان از الگوي Receive استفاده كرد؛ اين الگو مانند متد Send يك آرايه از بايت‌ها را دريافت مي‌كند و مقدار دريافت شده از يك سوكت را در آن ذخيره مي‌كند.اين كد‌ها براي سمت سرور بود، حالا يك كلاينت قرار است به اين سرور متصل شود و يك رشته متني به صورت Hello Click را به سرور ارسال كند.

IPAddress host = IPAddress.Parse("192.168.1.1");

IPEndPoint hostep = new IPEndPoint(host, 8000);

Socket sock = new Socket(AddressFamily.InterNetwork,

SocketType.Stream, ProtocolType.Tcp);

sock.Connect(hostep);

نخست مانند كد‌هاي بالا ما بايد آدرس IP و پورت سرور را داشته‌باشيم و سپس با استفاده از آنها يك نقطه تماس ايجاد مي‌كنيم، سپس به شيء ايجاد شده از كلاس Socket مي‌گوييم به نقطه اتصال ـ كه همان سرور است ـ وصل شود، سپس در كد زير يك رشته متني را به صورت يك ارائه از byte‌ها تبديل مي‌كنيم و آن‌را براي سرور ارسال مي‌كنيم.

sock.Send(Encoding.ASCII.GetBytes("Hello Click"));





تاريخ : سه شنبه 24 مرداد 1391برچسب:, | | نویسنده : مقدم |