سلام
چرا نیاز به پورت داریم مگر آی پی به تنهایی کافی نیست
نه کافی نیست.
اول این را مشخص کنم که کامپیوتر شما میتواند بیش از یک IP داشته باشد، چون میتوانید بیش از یک کارت شبکه داشته باشید.
همانطور که خودتان هم میدانید، IP نشانی و آدرس پستی رایانه شما در شبکه است. که مشخص میکند بسته اطلاعات باید تحویل چه رایانه ای شود.
Port به نوعی میتوان گفت کد پستی برنامه داخل رایانه شما است!
شما در یک لحظه میتوانید در حال چک کردن ایمیلتان در برنامه ای باشید، میتوانید با IE یک صفحه وب را ببینید یا به ftp وصل شده باشید و تازه یک برنامه چت هم باز باشد و SQLServer هم در گوشه ای کار خودش را کند ... !
(چه شود! آش شبکه ای!)
در این گیروداد و با یک IP مشخص چگونه اطلاعات تفکیک میشوند و به برنامه مناسب میرسند؟
==============
اعداد پورت های زیر 1024 برای استانداردهای خاصی رزو شده اند
مثلاً
21-FTP control
20-FTP data
80-HTTP
443-HTTPS
135-RPC
53-DNS
143-IMAP
993-IMAP SSL
110-POP3
995-POP3 SSL
135-RPC
23-Telnet
25-SMTP
1433-SQLServer
اگر برایتان نام پورتهای مهم جالب است، سری به این لینک بزنید
http://www.microsoft.com/resources/d....mspx?mfr=true
یا
http://www.iana.org/assignments/port-numbers
این رزو به معنای این نیست که شما نمیتوانید به انها وصل شوید و استفاده کنید، بلکه یک استاندارد جهانی است
همه انتظار دارند یک سوکت سرور روی پورت 80 خدمات HTTP بدهد نه اینکه سیب زمینی بفروشد!
شما میتوانید از هر پورتی که خالی باشد و برنامه دیگری از آن استفاده نکند، استفاده کنید، برای کارهای خودتان و خارج از چارت پروتکلهای پایه شبکه، بهتر است اعداد بالای 1024 را انتخاب کنید، مثل همان 5050.
==============
برخی اعداد IP ، انحصاری هستند و معنی خاصی دارند
مثلاً
ip4-127.0.0.1 برابر ip6-::1 معروف به loopback همواره به رایانه جاری اشاره میکنند.
(پس هر رایانه حداقل یک ip دارد، حتی بدون کارت شبکه.)
یا
ip4-255.255.255.255 معروف به broadcast آدرسی است که اگر چیزی به آن ارسال شود، همه رایانه ها در شبکه آن دیتا را دریافت میکنند.(ip6 دیگر این را ساپورت نمیکند)
یا
ip4-0.0.0.0 برابر ip6-:: معروف به widcard یا any معرف هر آدرس و هر رابطی است.
و...
==============
حالا میرسیم به IPAddress و IPEndPoint
اینها هیچ پویایی ندارند، فقط یک مخزن ساده هستند مثل ساختار Integer یا Long .
UInteger یک عدد 32 بیتی بدون علامت را نگه میدارد.
String یک متن
IPAddress یک IP را نگه میدارد.
IPEndPoint هم یک IPAddress و یک Integer برای معرفی Port را نگاه میدارد.
متد Parse هم در ساختارهای دات نت عموماً وظیفه تبدیل از String را بر عهده دارد.
مثلاً ورودی که از یک TextBox گرفته شده.
حتی Integer هم متد Parse دارد.
==============
متد Bind که از شما IPEndPoint را میگرید (IP+Port) و میتوانید به یک سوکت وصل شوید.
این سوکت میتواند هر کجا باشد، رایانه خودتان، یا رایانه شبکه، این سر دنیا یا ...
حتماً نباید به سرور وصل شوید! شاید سرور خود شما باشید!
متوجه میشوید؟ یعنی شاید خود شما پورتی را در رایانه خودتان میخواهید باز کنید تا به دیگر رایانه های شبکه سرویسی را ارائه دهید.
اصلاً میتوان در یک رایانه واحد روی یک پورت خاص هم سرور بود و هم کلاینت.
یعنی هم برای خود سرور بود و هم برای دیگران!
یعنی برنامه A در رایانه خود شما که اصلاً کارت شبکه هم ندارد، پورتی را تحت tcp باز میکند و به درخواستهایش پاسخ میدهد
و برنامه B در رایانه خودتان می تواند همان پورت را برای خدمات گیری باز کند و شروع به انتقال دیتا با برنامه A کند.
در یک رایانه واحد و بدون کارت شبکه! چون آدرس loopback را داریم.
البته پروتکلهای اتصال گرایی مثل tcp در هر لحظه فقط و فقط به یک برنامه اجازه میدهند یک پورت را برای سرور بودن و پذیرش درخواستها باز کند.
یعنی در همین مثال فوق:
اگر شما نمونه جدیدی از A را باز کنید تا دو تا شوند، برنامه دوم به خطا میخورد.
ولی اگر 10 تای دیگر از B را باز کنید، مشکلی پیش نمی آید.
واضح است، سرور ثابت است و کلاینت ها خیلی زیاد و خیلی پخش.
پس برای تست کدها و دیدن نتایج حتماً لازم نیست در شبکه ای با چند رایانه باشید.
دلیل اینکه در مثالها این همه آدرس loopback را می بینید برای همین است.
که مثال مربوطه به راحتی در یک رایانه واحد اجرا و تست شود و نتیجه مشاهده شود.
==============
فکر کنم همه سوالات را در متن پاسخ داده ام.