سوکت TCP :
وقتی دو فرایند از طریق TCP با یکدیگر ارتباط برقرار می کنند مثل این است که کانالی بین دو فرایند وجود دارد .
این ارتباط کانالی تا زمانی ادامه خواهد داشت که یکی از دو فرایند ان را ببندد .
وقتی یکی از فرایند ها میخواهد بایتی را ارسال کند این بایت ها بر روی کانال قرار می دهد .
در اینجا کانال به طور مستقیم به مقصد متصل بوده پس فرستنده نمی تواند ادرس مقصد را نیز همراه ان ارسال کند . علاوه بر این این کانال های ارتباطی , ارتباط قابل اطمینانی را برای صحت ارسال و دریافت اطاعات فراهم می کنند یعنی دقیقا همان دنباله از بایت هایی که ارسال شده توسط گیرنده دریافت می شود . به خاطر همین ویژگی است که Tcp را connection oriented می نامند .
محیط کاری .net دو کلاس مخصوص tcp را فراهم می کند . tcpClient و tcplistener اگر چه این دو کلاس سطح بالایی از امکانات کلاس socket را ارائه می دهند اما در ادامه خواهیم دید که موارد بسیاری نیز وجود دارند که عملیات پیشرفته فقط با استفاده از کلاس socket امکان پذیر خواهد بود.
سرویس گیرنده Tcp :
سرویس گیرنده Tcp مخابره را با سرویس دهنده ای که منتظر اتصال است اغاز می کند برای این کار سه مرحله تعریف شده است :
1- ایجاد نمونه ای از TcpClient
2 - ارسال با استفاده از سوکت استریم
3 - بستن اتصال
کلاس TcpClient :
این کلاس متد های ساده ای را برای اتصال سرویس گیرنده , ارسال و یا دریافت داده ها فراهم می کند . متد GetStream مربوط به این کلاس دستیابی به NetworkStream را امکان پذیر می سازد تا ارسال و دریافت داده ها را میسر سازد .
سازنده ها :
public TcpClient tcp;
tcp = new TcpClient("127.0.0.1", 2000);
در این نوع ادرس ها به صورت مستقیم وارد خواهند شد . توجه داشته باشید که مقدار اول HostName یا همان ادرس هاست و دومی پورتی که توسط tcpClient به ان متصل خواهد شد .
tcp = new TcpClient();
توجه داشته باشید که اگر سرویس دهنده مشخص نشود قبل از ارسال داده باید متد connect را فراخوانی کنید
tcp = new TcpClient();
tcp.Connect(IPAddress.Parse("127.0.0.1"), 2000);
توجه داشته باشید که علاوه بر ادرس دهی مستقیم می توانید از IpEndPoint نیز استفاده کنید :
public IPEndPoint EndPoint;
EndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000);
tcp = new TcpClient(EndPoint);
متد ها :
متد Close
این متد اتصال tcp را بسته و تمام منابع مربوط به tcpClient را ازاد می کند . توجه کنید زمانی که از NetworkStream استفاده میشود بهتر است Network Stream بسته شود تا به طور ضمنی سوکت نیز بسته شود .
بستن TcpClient منابع مربط به NetworkStream را ازاد نمی کند .
متد Connect
همانطور که گفته شد در صورتی که ادرس سرویس دهنده را مشخص نکنیم باید از این متد استفاده کنیم . این متد با استفاده از پارامتر های مقصدی که به آن ارسال می گردد به میزبان راه دور متصل میشود .
ادرس دهی به این متد نیز همانند قبل به وسیله
ادرس دهی مستقیم
به وسیله IpAddress
و یا به وسیله IpEndPoint می باشد
tcp.Connect(IPAddress.Parse("127.0.0.1"), 2000);
EndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000);
tcp.Connect(EndPoint);
tcp.Connect(IPAddress.Parse("127.0.0.1"), 2000);
متد GetStream
این متد نمونه از Network Stream را برای ارسال و دریافت داده ها ارسال می کند
کلاس EndPoint :
در توضیحات بالا چند بار از این کلاس استفاده کرده ایم . اکنون به شرح ان خواهیم پرداخت . این کلاس یک پایه برای تعیین نقطه اتصال به شبکه است که کلاس IpEndPoint نیز از ان مشتق می شود .
سازنده :
Protected EndPoint
این سازنده توسط سازنده های کلاس مشتق فراخوانی می شود .
کلاس IpEndPoint
این کلاس نقطه انتهایی شبکه tcp/ip را به صورت یک ادرس ip و شماره پورت نمایش می دهد :
سازنده :
public IPEndPoint EndPoint;
EndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000);
EndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2000);
EndPoint = new IPEndPoint(long Address , int port);
خواص :
IpAddress
یک نمونه از کلاس IpAddress که حاوی ادرس ip نقطه پایانی است
Port
یک مقدار صحیح که شماره پورت tcp یا udp نقطه پایانی را نشان می دهد . پورت باید در بازه MinPort و MaxPort باشد .