PDA

View Full Version : برنامه نویسی تحت شبکه socket programming



shantia20042004
چهارشنبه 23 آذر 1384, 15:33 عصر
[بسم الله الرحمن الرحیم


عنوان مقاله: with C++ Socket Programing

نویسنده : مهندس محمد صا بر ایرجی
ایمیل: Shantia20042004@yahoo.com
کلمات کلیدی:
IP: در شبکه هر کامپیوتر دارای آدرس میباشد , این عدد آدرس 32 بیتی , به عبارتی 4 قسمتی را IP گویند.
TCP: یکی از پروتکل های لایه انتقال در شبکه اتصالگرا میباشد
. (Transmission Control Protocol)
UDP: یکی از پروتکل های لایه انتقال در شبکه غیراتصالگرا میباشد .
CLIENT:کامپیوتری که در شبکه سرویس گیرنده است.
SERVER:کامپیوتری که به در خواستهای سرویس گیرنده ها پاسخ میدهد.
خلاصه:
امروزه با گسترش ارتبا طات و انواع شبکه های کامپیوتری جهت انجام امور نیاز مبرم به بر نامه های تحت شبکه از جمله socket programing احساس میشود , لذا در این مقاله به ا رائه مطالبی در این زمینه و ایجاد یک برنامه تحت شبکه(برنامه chat) میپردازم. در حقیقت این مقاله نقطه آغازی برای همه بر نامه نویسانی خواهد بود که به نحوی مجبور خو اهند شد برنامه کار بردی تحت شبکه اینترنت بنویسند.
برای یک ارتباط نیاز به موارد زیر است :
• ارتباط ادامه دار
• زبان مشترک
• معنای آدرس دهی
ارتباط عمومی:
پروتکلها : زبانهای مشترک اینترنت هستند.


انواع آدرس در اینترنت :
1- آدرس IP از جنس آدرس فیزیکی 161.12.188.167
2- نام Domain از جنس آدرس منطقی ex.iraji .com
آدرس IP آدرس 32 بیتی است که به 4 قسمت تقسیم می گردد محدوده اعداد در هر قسمت از 255- 0
می باشد.
5 طبقه بندی برای آدرس IP وجود دارد :



توابع API در C :
GETHOST BY NAME – NAME IP ADDRES
GET HOST BY ADDRES – IP ADDRES AQME

برنامه های کاربردی مشترک:
در هر مورد پروتکل نمونه تعریف شده است .



شماره پورت :
16 بیت صحیح است . برای ارتباط نیاز به آدرس IP و شماره پورت می باشد.

در TCP ارتباط تعریف می شود با


Unix در


در unix 1024 پورت اول برای هر دو نوع پورتکلها است و weu known ports نامیده می شود.



مدل tcp مبتنی بر اتصال است
قابل اطمینان smtr،http ،telnet ،ftp
رشته ای است (مسیل و نهر) (transmission control protocol / internet protocol)


مدلp ud غیر قابل اتصال
غیر قابل اطمینان tftp، nfs
دیتا گرامی است . ( بر اساس packet) (user datagram protocol) چکسام










مفهوم socket :
فرض کنید در محیطی کار میکنید که فقط با فایل ها سر و کار داریم ,در چنین سیستمی ورودی خروجی هم (I/O) میتواند تو سط سیستم فایلها مدیریت شود.به عنوان مثال, صفحه نمایش را همانند یک فایل متنی در نظر بگیرید برای ا ینکه اطلاعا ت را در صفحه نمایش بفرستیم باید فایل را از نوع نوشتنی باز کنیم و اگر محتوای اشاره گر فایل خالی نبود یعنی سیستم عامل به فایل حافظه اختصاص داد میتوان در فایل اطلاعات را نوشت.
میتوانیم این ساختار را برای ارتباط دو بر نامه کاربردی روی دو کامپیوتر گسترش دهیم , یعنی باید یک ارتباط با یک کامپیوترروی شبکه) با یک آدرس Ip خاص (و برنامه ای خاص روی کامپیوتر با آدرس پورت مشخص بگشاییم.
سوکت ، ترکیبی از یک آدرس IP و پورت TCP ویا پورت UDP است . یک برنامه ، سوکتی را با مشخص نمودن آدرس IP مربوط به کامپیوتر و نوع سرویس ( TCP برای تضمین توزیع اطلاعات و یا UDP) و پورتی که نشاندهنده برنامه است، مشخص می نماید. آدرس IP موجود در سوکت ، امکان آدرس دهی کامپیوتر مقصد را فراهم و پورت مربوطه ، برنامه ای را که داده ها برای آن ارسال می گردد را مشخص می نماید.درزیر نام چند پروتکل برنامه کاربردی و آدرس پورت آنها مشخص شده است:




بسیاری از برنامه های کاربردی تحت شبکه از یک شماره پورت خاصی برای ارسال و در یافت اطلاعات استفاده میکنند.به عنوان مثال برنامه فرستادن ایمیل به پورت 25 گوش میکند , ما در برنامه های کاربردی خود می توانیم از پورت دلخواه استفاده کنیم , به عنوان مثال شماره سوکت در یک برنامه تحت شبکه میتواند :2000 127.67.78.97 باشد که قالب کلی این آدرس به صورت Ip:Port میباشد .
مفهوم Sap :
در سمت client & server بسته های شکسته شده برنامه های کاربردی مربوطه با عبور از پورت مربوطه از لایه های دیگر شبکه عبور میکنند.این شماره پورت واسط بین لایه برنامه کاربردی و انتقال در حقیقت همان Sap میباشد .به شکل زیر نگاه کنید.



بنابراین ارتباط بین دو برنامه تحت شبکه مبادله اتلاعات بین دو نقطه TSap روی دو کامپیوتر در شبکه میباشد.همانطور که میتوان چندین فابل را همزمان باز نگه داشت در یک برنامه تحت شبکه همزمان میتوان چندین ارتباط باز و فعال داشته باشیم .مثلا از برنامه Yahoo messenger استفاده میکنیم در حقیقت ما از برنامه سمت client آن استفاده میکنیم و در server yahoo برنامه ای به پورتی که برنامه client اطلاعات را به آن میفرستد گوش میدهد.
انواع سوکت :
سوکت ها به طور کلی به 2 نوع میباشند:
1- سوکت های نوع stream که از نوع اتصالگرا هستند , یعنی باید قبل از مبادله اطلا عات یک اتصال به صورت لوله فرضی بین client و server بوجود میاید, این نوع سوکت ها بر مبنای tcp هستند.
2- سوکت های datagramکه از نوع بدون اتصال هستند , یعنی نیاز به برقراری ارتباط فرضی ندارند , پس هیچ امنیتی در این نوع ارتباط وجود ندارد, این نوع سوکت ها بر مبنایudp هستند.
همواره باید به این نکته توجه کرد که در برنامه های تحت شبکه ارتباطات دو طرفه میباشد, یک برنامه ای که در سمت سرویس گیرنده اجرا میشود و دیگری در سمت سرویس دهنده.برنامه نویسی سوکت مربوط به لایه کاربردی میباشد و انتقال بسته های اطلاعاتی به لایه های دگر بر عهده سیستم عامل میباشد.
قبل از وارد شدن در مقوله برنامه نویسی سوکت بد نیست الگوریتم کل کاری که بایستی در سمت سرویس دهنده همچنین در سمت مشتری انجام شود را بررسی نماییم :

الف) یک سوکت را که مشخصه یک ارتباط است بوجود بیاوریم . این قسمت باید نوع ارتباط خود با سیستم عامل را (tcp یا upd ) معرفی نماییم . این کار در محیط یونیکس توسط تابع ()socket انجام می گیرد .

ب) به سوکتی که باز کرده اید آدرس پورت نسبت می دهیم بدین صورت تمام بسته های Tcp یا upd ای که آدرس پورت مقصدشان با شماره پورت برنامه شما مطابقت دارد به سمت برنامه شما فرستاده می شود این کار توسط تابع سیستمی() bind انجام می شود.به این پورت ، پورت منفعل می گویند .



ج) حال باید به سیستم عامل بگوییم کارش را برای پذیرش تقاضاهای ارتباط شروع نماید.این کار توسط تابع سیستمی ()listen انجام می شود . چون ممکن است تعداد تقاضاهای ارتباط زیاد باشد باید حد اکثر تعداد ارتباط tcp را که می توان پذیرفت مشخص کرد و برای آن بافر در نظر گرفت.






د) در پایان باید از سیستم عامل بخواهیم که یکی از ارتباطات معلق را به برنامه شما معرفی کند . این کار توسط تابع () accept انجام می گیرد.


ه) از دستورات () send و ()recv برای مبادله داده استفاده می شود.
و) در پایان باید ارتباط خاتمه یابد . به دو صورت است:




در برنامه مشتری بایستی اعمال زیر را انجام داد :
الف) یک سوکت بوجود بیاوریم
ب) نیازی نیست مانند سرویس دهنده به سوکت خود آدرس پورت نسبت دهیم یعنی لزومی به استفاده از دستور bind نیست چرا که برنامه سمت client منتظر تقاضای دیگران نیست بلکه خودش متقاضی برقراری ارتباط است . بنا بر این با تابع connect تقاضا را به سمت server می فرستیم .
ج) از توابع ()send یا ()recv برای ارسال و در یافت داده اقدام کنید .
د) ارتباط را با توابع close یا shut down می بندیم .



توابع مورد استفاده در socket programming در :C
* توابع socket غیر واقعی :
Ret = parse _net work _args (args & argv & host & port &errmes)
تنظیمات مربوط به شبکه را انجام می دهد و ویرایش می کند. به دنبال host و port می گردد و آنها را منتقل می کند . در صورت موفقیت صفررا برمی گرداند.
**قسمت :server

1)-Port _sk = socket(af_inet ,sock_stream ):

2)-Port _sk = tcp _passive _ open (port)
در قسمت server اجرا می شود.
Port = تعداد rort هایی که به کار می رود .
است . Port- sk توصیفگر socket
3)-Bind (polt _ sk, &bind_ddr , addr _lenl);

4)- Client _sk = accept (port _sk , &bind _ addr ,&lenl);

:client قسمت ***
1)-Serr_ sk = tcp _active_open (host ,port)
Host = نام ماشین server
Port = شماره پورتی که به کار می رود
Server-sk = توصیفگر socket است .
آدرس IP و HOST پیدا می شود :
Host Ip = gethost by name(host name);
2) Ser v _sk = secket (af _ inetو sock _ stream;);
3) connect( ser v _skو &bind _addr و addr _len);
سوکت Serv _sk می تواند برای صحبت با سرور به کار رود .
Header files های اصلی در زبان c برای برنامه نویسی socket :

.<sys/ typas.h> لازمه انواع داده ای است
.<errno.h> ها می باشد error شماره
.<sys/sochet.n> و سیستمی را شامل میباشد socke ساختارها و ثابت های
.<netdb.h.h> ساختارهای مربوطه به شبکه ای را شامل می باشد
.<netinet/in.h > را شامل می شود socketتوابع مربوط .<arpa/inet.h> توابع کاربردی را شامل می باشد
توابع مدیریت داده در شبکه :
IP و نام dns یک host را بر می گردان * get host by name -
نام service و پروتکل را بر می گرداند. * get serv by name -
نام host را در شبکه محلی بر می گرداند. * get host name -
* get server by name get serv by port get servent
* getproto by name get proto by number get protobyeat
* get net by name get net by add get net ent

مقایسه ارسال و دریافت داده ها به روش : udp
روال در هر دو برنامه سمت client ،server به یک شکل است :
الف ) یک سوکت از نوع دیتا گرام ایجاد کنید . این کار با فراخوانی تابع ()socket با پارامتر sock-dgram انجام می شود
ب) با تابع ()bind به سکوت ایجاد شده آدرس پورت مورد نظرتان را نسبت دهید.
ج ) حال می توانید منتظر دریافت و یا ارسال داده ها باشید ( در دریافت آدرس برنامه مبداء ( آدرس ip و port ) مشخص می گردد و ارسال امکان پذیر است).

ارسال و دریافت با توابع انجام می شود.


د) سوکت ایجاد شده را ببندید .


نتیجه گیری:

بر اساس تمام برنامه های کاربردی تحت شبکه لایه چهارم مفهومی به نام سوکت است . این مفهوم به منظور برقراری ارتباط برنامه های تحت شبکه و تبادل جریان داده ها بین پروسه ها ابداع شد . لذا این مقاله نقطه آغازی برای همه برنامه نویسانی خواهد بود که به نحوی مجبور خواهند شد برنامه کاربردی تحت شبکه اینترنت بنویسند.

منابع :

* Internet working with tcp/ ip : uelumes I II III Douglas comer , prentice hall , 2000
* the whole internet user s guide & catalog by ed kroll; oreilly &associates

* socket Api programmer s refrence 2003

powerboy2988
دوشنبه 06 آذر 1385, 23:03 عصر
دمت گرم خدا هر چی می خواد بهت بده چقدر من دنباله این مطلب بودم

powerboy2988
سه شنبه 07 آذر 1385, 23:14 عصر
آقا بازم ممنون اما مطلبتون چند تا مشکل داره
- عکس ها رو نزاشتید
- یه جاهایی udp رو pud معرفی کردین
-....
یه نگاه دوباره بکنید به متنتون ممنمو میشم
خوش باشی

joker
سه شنبه 07 آذر 1385, 23:21 عصر
کتاب مهندسی اینترنت استاد ملکیان را بخونی بهتره ;)

این لینک را هم ببین:
http://forums.simorgh-ev.com/viewtopic.php?t=187&highlight=socket

*sepide*
شنبه 04 فروردین 1386, 01:37 صبح
مرسی از مطلب خوبتون

amirsadeghi
چهارشنبه 12 اردیبهشت 1386, 23:18 عصر
نمونه کد آماده در این رابطه ندارید؟

ghobad
پنج شنبه 02 اسفند 1386, 10:38 صبح
اگر در مورد ارسال ویدیو بصورت بلادرنگ در #C هم چیزی میدونین بگین. مرسی ....

smailvb
جمعه 17 آبان 1387, 21:11 عصر
mer30از شما

BlackLight
یک شنبه 26 آبان 1387, 23:09 عصر
با کدوم تابع api میشه با شماره ی یه پورت، اونو بست؟(مثلا پورت 12345):متفکر:

makhmaaal
سه شنبه 10 دی 1387, 20:37 عصر
سلام
از دوستان کسی فايل wordمقاله ی بالا رو داره? اگه لطف کنه ممنون ميشم

afrouz
چهارشنبه 12 فروردین 1388, 07:55 صبح
سلام من یک کاربر جدید هستم و می خواستم یک برنامه messenger بنویسم. چیزی هم از socket programing سر در نمی آرم. با مفهومات شبکه هم تا حدی آشنا هستم .
می شه به من بگین اصلا از کجا باید شروع کنم؟ و باید چی کار کنم؟ ممنون

shervin_agh67
چهارشنبه 12 فروردین 1388, 15:08 عصر
با چه زبانی می خوای بنویسی . اگه با سی شارپ می خوای کار کنی اولین کارت اینه که تو سایت یک سرچ کنی انواع مدلاش رو می بینی . ولی اگه با سی++ هست ... شرمندت برنامه ی زیاد جالبی وجود نداره همون در حد چت دونفرست .

manvaputra
پنج شنبه 13 فروردین 1388, 07:35 صبح
توی بخش جاوا هم هست توی قسمت اعلان هاش

sooshianc
سه شنبه 15 اردیبهشت 1388, 16:40 عصر
با سلام
من برای انجام یک پروژه دانشگاهی نیاز دارم که socket Programming رو یاد بگیرم و یک زبان واشه نوشتن انتخاب کنم شما از بین C++ و C# کدوم رو پیشنهاد مکنید؟
در ضمن اگه مطلب مفیدی راجه به این موضع دارید link بدید ممنون می شم.

shervin_agh67
سه شنبه 15 اردیبهشت 1388, 16:44 عصر
مسلما C# . کتاب برنامه نویسی شبکه از انتشارات دیباگران رو مطالعه کن. جعفرنژاد هم ترجمش کرده . واسه مطلب مفید هم سرچ کن . قبلا مدلای جالبی مطرح شده بود .

tdkhakpur
سه شنبه 15 اردیبهشت 1388, 22:37 عصر
[بسم الله الرحمن الرحیم


عنوان مقاله: with C++ Socket Programing

نویسنده : مهندس محمد صا بر ایرجی
ایمیل: Shantia20042004@yahoo.com
کلمات کلیدی:
IP: در شبکه هر کامپیوتر دارای آدرس میباشد , این عدد آدرس 32 بیتی , به عبارتی 4 قسمتی را IP گویند.
TCP: یکی از پروتکل های لایه انتقال در شبکه اتصالگرا میباشد
. (Transmission Control Protocol)
UDP: یکی از پروتکل های لایه انتقال در شبکه غیراتصالگرا میباشد .
CLIENT:کامپیوتری که در شبکه سرویس گیرنده است.
SERVER:کامپیوتری که به در خواستهای سرویس گیرنده ها پاسخ میدهد.
خلاصه:
امروزه با گسترش ارتبا طات و انواع شبکه های کامپیوتری جهت انجام امور نیاز مبرم به بر نامه های تحت شبکه از جمله socket programing احساس میشود , لذا در این مقاله به ا رائه مطالبی در این زمینه و ایجاد یک برنامه تحت شبکه(برنامه chat) میپردازم. در حقیقت این مقاله نقطه آغازی برای همه بر نامه نویسانی خواهد بود که به نحوی مجبور خو اهند شد برنامه کار بردی تحت شبکه اینترنت بنویسند.
برای یک ارتباط نیاز به موارد زیر است :
• ارتباط ادامه دار
• زبان مشترک
• معنای آدرس دهی
ارتباط عمومی:
پروتکلها : زبانهای مشترک اینترنت هستند.


انواع آدرس در اینترنت :
1- آدرس IP از جنس آدرس فیزیکی 161.12.188.167
2- نام Domain از جنس آدرس منطقی ex.iraji .com
آدرس IP آدرس 32 بیتی است که به 4 قسمت تقسیم می گردد محدوده اعداد در هر قسمت از 255- 0
می باشد.
5 طبقه بندی برای آدرس IP وجود دارد :



توابع API در C :
GETHOST BY NAME – NAME IP ADDRES
GET HOST BY ADDRES – IP ADDRES AQME

برنامه های کاربردی مشترک:
در هر مورد پروتکل نمونه تعریف شده است .



شماره پورت :
16 بیت صحیح است . برای ارتباط نیاز به آدرس IP و شماره پورت می باشد.

در TCP ارتباط تعریف می شود با


Unix در


در unix 1024 پورت اول برای هر دو نوع پورتکلها است و weu known ports نامیده می شود.



مدل tcp مبتنی بر اتصال است
قابل اطمینان smtr،http ،telnet ،ftp
رشته ای است (مسیل و نهر) (transmission control protocol / internet protocol)


مدلp ud غیر قابل اتصال
غیر قابل اطمینان tftp، nfs
دیتا گرامی است . ( بر اساس packet) (user datagram protocol) چکسام










مفهوم socket :
فرض کنید در محیطی کار میکنید که فقط با فایل ها سر و کار داریم ,در چنین سیستمی ورودی خروجی هم (I/O) میتواند تو سط سیستم فایلها مدیریت شود.به عنوان مثال, صفحه نمایش را همانند یک فایل متنی در نظر بگیرید برای ا ینکه اطلاعا ت را در صفحه نمایش بفرستیم باید فایل را از نوع نوشتنی باز کنیم و اگر محتوای اشاره گر فایل خالی نبود یعنی سیستم عامل به فایل حافظه اختصاص داد میتوان در فایل اطلاعات را نوشت.
میتوانیم این ساختار را برای ارتباط دو بر نامه کاربردی روی دو کامپیوتر گسترش دهیم , یعنی باید یک ارتباط با یک کامپیوترروی شبکه) با یک آدرس Ip خاص (و برنامه ای خاص روی کامپیوتر با آدرس پورت مشخص بگشاییم.
سوکت ، ترکیبی از یک آدرس IP و پورت TCP ویا پورت UDP است . یک برنامه ، سوکتی را با مشخص نمودن آدرس IP مربوط به کامپیوتر و نوع سرویس ( TCP برای تضمین توزیع اطلاعات و یا UDP) و پورتی که نشاندهنده برنامه است، مشخص می نماید. آدرس IP موجود در سوکت ، امکان آدرس دهی کامپیوتر مقصد را فراهم و پورت مربوطه ، برنامه ای را که داده ها برای آن ارسال می گردد را مشخص می نماید.درزیر نام چند پروتکل برنامه کاربردی و آدرس پورت آنها مشخص شده است:




بسیاری از برنامه های کاربردی تحت شبکه از یک شماره پورت خاصی برای ارسال و در یافت اطلاعات استفاده میکنند.به عنوان مثال برنامه فرستادن ایمیل به پورت 25 گوش میکند , ما در برنامه های کاربردی خود می توانیم از پورت دلخواه استفاده کنیم , به عنوان مثال شماره سوکت در یک برنامه تحت شبکه میتواند :2000 127.67.78.97 باشد که قالب کلی این آدرس به صورت Ip:Port میباشد .
مفهوم Sap :
در سمت client & server بسته های شکسته شده برنامه های کاربردی مربوطه با عبور از پورت مربوطه از لایه های دیگر شبکه عبور میکنند.این شماره پورت واسط بین لایه برنامه کاربردی و انتقال در حقیقت همان Sap میباشد .به شکل زیر نگاه کنید.



بنابراین ارتباط بین دو برنامه تحت شبکه مبادله اتلاعات بین دو نقطه TSap روی دو کامپیوتر در شبکه میباشد.همانطور که میتوان چندین فابل را همزمان باز نگه داشت در یک برنامه تحت شبکه همزمان میتوان چندین ارتباط باز و فعال داشته باشیم .مثلا از برنامه Yahoo messenger استفاده میکنیم در حقیقت ما از برنامه سمت client آن استفاده میکنیم و در server yahoo برنامه ای به پورتی که برنامه client اطلاعات را به آن میفرستد گوش میدهد.
انواع سوکت :
سوکت ها به طور کلی به 2 نوع میباشند:
1- سوکت های نوع stream که از نوع اتصالگرا هستند , یعنی باید قبل از مبادله اطلا عات یک اتصال به صورت لوله فرضی بین client و server بوجود میاید, این نوع سوکت ها بر مبنای tcp هستند.
2- سوکت های datagramکه از نوع بدون اتصال هستند , یعنی نیاز به برقراری ارتباط فرضی ندارند , پس هیچ امنیتی در این نوع ارتباط وجود ندارد, این نوع سوکت ها بر مبنایudp هستند.
همواره باید به این نکته توجه کرد که در برنامه های تحت شبکه ارتباطات دو طرفه میباشد, یک برنامه ای که در سمت سرویس گیرنده اجرا میشود و دیگری در سمت سرویس دهنده.برنامه نویسی سوکت مربوط به لایه کاربردی میباشد و انتقال بسته های اطلاعاتی به لایه های دگر بر عهده سیستم عامل میباشد.
قبل از وارد شدن در مقوله برنامه نویسی سوکت بد نیست الگوریتم کل کاری که بایستی در سمت سرویس دهنده همچنین در سمت مشتری انجام شود را بررسی نماییم :

الف) یک سوکت را که مشخصه یک ارتباط است بوجود بیاوریم . این قسمت باید نوع ارتباط خود با سیستم عامل را (tcp یا upd ) معرفی نماییم . این کار در محیط یونیکس توسط تابع ()socket انجام می گیرد .

ب) به سوکتی که باز کرده اید آدرس پورت نسبت می دهیم بدین صورت تمام بسته های Tcp یا upd ای که آدرس پورت مقصدشان با شماره پورت برنامه شما مطابقت دارد به سمت برنامه شما فرستاده می شود این کار توسط تابع سیستمی() bind انجام می شود.به این پورت ، پورت منفعل می گویند .



ج) حال باید به سیستم عامل بگوییم کارش را برای پذیرش تقاضاهای ارتباط شروع نماید.این کار توسط تابع سیستمی ()listen انجام می شود . چون ممکن است تعداد تقاضاهای ارتباط زیاد باشد باید حد اکثر تعداد ارتباط tcp را که می توان پذیرفت مشخص کرد و برای آن بافر در نظر گرفت.






د) در پایان باید از سیستم عامل بخواهیم که یکی از ارتباطات معلق را به برنامه شما معرفی کند . این کار توسط تابع () accept انجام می گیرد.


ه) از دستورات () send و ()recv برای مبادله داده استفاده می شود.
و) در پایان باید ارتباط خاتمه یابد . به دو صورت است:




در برنامه مشتری بایستی اعمال زیر را انجام داد :
الف) یک سوکت بوجود بیاوریم
ب) نیازی نیست مانند سرویس دهنده به سوکت خود آدرس پورت نسبت دهیم یعنی لزومی به استفاده از دستور bind نیست چرا که برنامه سمت client منتظر تقاضای دیگران نیست بلکه خودش متقاضی برقراری ارتباط است . بنا بر این با تابع connect تقاضا را به سمت server می فرستیم .
ج) از توابع ()send یا ()recv برای ارسال و در یافت داده اقدام کنید .
د) ارتباط را با توابع close یا shut down می بندیم .



توابع مورد استفاده در socket programming در :C
* توابع socket غیر واقعی :
Ret = parse _net work _args (args & argv & host & port &errmes)
تنظیمات مربوط به شبکه را انجام می دهد و ویرایش می کند. به دنبال host و port می گردد و آنها را منتقل می کند . در صورت موفقیت صفررا برمی گرداند.
**قسمت :server

1)-Port _sk = socket(af_inet ,sock_stream ):

2)-Port _sk = tcp _passive _ open (port)
در قسمت server اجرا می شود.
Port = تعداد rort هایی که به کار می رود .
است . Port- sk توصیفگر socket
3)-Bind (polt _ sk, &bind_ddr , addr _lenl);

4)- Client _sk = accept (port _sk , &bind _ addr ,&lenl);

:client قسمت ***
1)-Serr_ sk = tcp _active_open (host ,port)
Host = نام ماشین server
Port = شماره پورتی که به کار می رود
Server-sk = توصیفگر socket است .
آدرس IP و HOST پیدا می شود :
Host Ip = gethost by name(host name);
2) Ser v _sk = secket (af _ inetو sock _ stream;);
3) connect( ser v _skو &bind _addr و addr _len);
سوکت Serv _sk می تواند برای صحبت با سرور به کار رود .
Header files های اصلی در زبان c برای برنامه نویسی socket :

.<sys/ typas.h> لازمه انواع داده ای است
.<errno.h> ها می باشد error شماره
.<sys/sochet.n> و سیستمی را شامل میباشد socke ساختارها و ثابت های
.<netdb.h.h> ساختارهای مربوطه به شبکه ای را شامل می باشد
.<netinet/in.h > را شامل می شود socketتوابع مربوط .<arpa/inet.h> توابع کاربردی را شامل می باشد
توابع مدیریت داده در شبکه :
IP و نام dns یک host را بر می گردان * get host by name -
نام service و پروتکل را بر می گرداند. * get serv by name -
نام host را در شبکه محلی بر می گرداند. * get host name -
* get server by name get serv by port get servent
* getproto by name get proto by number get protobyeat
* get net by name get net by add get net ent

مقایسه ارسال و دریافت داده ها به روش : udp
روال در هر دو برنامه سمت client ،server به یک شکل است :
الف ) یک سوکت از نوع دیتا گرام ایجاد کنید . این کار با فراخوانی تابع ()socket با پارامتر sock-dgram انجام می شود
ب) با تابع ()bind به سکوت ایجاد شده آدرس پورت مورد نظرتان را نسبت دهید.
ج ) حال می توانید منتظر دریافت و یا ارسال داده ها باشید ( در دریافت آدرس برنامه مبداء ( آدرس ip و port ) مشخص می گردد و ارسال امکان پذیر است).

ارسال و دریافت با توابع انجام می شود.


د) سوکت ایجاد شده را ببندید .


نتیجه گیری:

بر اساس تمام برنامه های کاربردی تحت شبکه لایه چهارم مفهومی به نام سوکت است . این مفهوم به منظور برقراری ارتباط برنامه های تحت شبکه و تبادل جریان داده ها بین پروسه ها ابداع شد . لذا این مقاله نقطه آغازی برای همه برنامه نویسانی خواهد بود که به نحوی مجبور خواهند شد برنامه کاربردی تحت شبکه اینترنت بنویسند.

منابع :

* Internet working with tcp/ ip : uelumes I II III Douglas comer , prentice hall , 2000
* the whole internet user s guide & catalog by ed kroll; oreilly &associates

* socket Api programmer s refrence 2003


دوست گرامی از زحمتی که کشیدین باید تشکر کرد چون نحوه گفتار شما میتونیم بگیم تقریبا بصری بود.
ولی سوالی از شما دارم این توضیحات بر روی چه سیستم عاملی مرتبط کردید.
دوم اینکه خودتون این توضیحات رو عملیش کردیدن چون توضیح دادن کمی آسونه.

javad_abd
شنبه 20 تیر 1388, 09:14 صبح
سلام
در مورد کلاس TCP کسی می تونه کمکم کنه البته به زبان C#

joojoo66
شنبه 31 مرداد 1388, 22:24 عصر
من مقاله سوکت پروگرمینگ تو سی شارپ و لینوکس رو دارم. اگه کسی لازم داشت پیام بده تا آپلود کنم. :چشمک:

asefy2008
شنبه 21 شهریور 1388, 08:56 صبح
کتاب مهندسی اینترنت استاد ملکیان را بخونی بهتره ;)

این لینک را هم ببین:
http://forums.simorgh-ev.com/viewtopic.php?t=187&highlight=socket
سلام دوست من اين لينكي كه گذاشتيد باز نميشه

hitrax
یک شنبه 12 مهر 1388, 14:02 عصر
از مطلب مفید شما سپاسگذارم.

Ahmad_VB
یک شنبه 26 مهر 1388, 17:26 عصر
من مقاله سوکت پروگرمینگ تو سی شارپ و لینوکس رو دارم. اگه کسی لازم داشت پیام بده تا آپلود کنم. :چشمک:

سلام
ممنون میشم اگر مقاله مربوط به C#‎‎ را بگذارید

homa88
دوشنبه 27 مهر 1388, 11:08 صبح
ممنون میشم اگه کسی با جاوا در زمینه socket programming کار کرده باشه و به من بگه چه جوری باید شروع کنم ؟

manvaputra
جمعه 29 آبان 1388, 22:04 عصر
ممنون میشم اگه کسی با جاوا در زمینه socket programming کار کرده باشه و به من بگه چه جوری باید شروع کنم ؟

دوست عزيز يه سري كامل آموزش رو توي بخش جاوا گذاشتم

Cybersilent
سه شنبه 27 بهمن 1388, 18:04 عصر
من یه مقاله برنامه نویسی سوکت به زبان جاوا و انگلیسی دارم که همه چی رو توش گفته درسته که انگلیسی هست اما میشه چیزی رو که می خواهیم از توش در بیاریم می زارم تا دوستان استفاده کنند

stahad1
پنج شنبه 07 بهمن 1389, 21:05 عصر
می خوام برای usb برنامه نویسی کنم با برنامه نویسی شبکه فرقی داره یا نه؟؟

amirsadeghi
جمعه 27 اسفند 1389, 22:52 عصر
می خوام برای usb برنامه نویسی کنم با برنامه نویسی شبکه فرقی داره یا نه؟؟

مطمئنا با هم متفاوت هستن دوست عزیز ...

negin rad
چهارشنبه 13 دی 1391, 15:55 عصر
man ye porozhe bayad dorost konam massanger valii hichii balad nistam ye mesaliii barnameye amadeii aya voojood nadaree aslanm mohem ni ba che zabnii neveshte beshe faght tahde socket bashe ? ::گریه::افسرده:

amin_sltny
جمعه 18 اسفند 1391, 09:00 صبح
man ye porozhe bayad dorost konam massanger valii hichii balad nistam ye mesaliii barnameye amadeii aya voojood nadaree aslanm mohem ni ba che zabnii neveshte beshe faght tahde socket bashe ? ::گریه::افسرده:

خواهشن فارسی بنویسید که راحت تر خونده بشه؟

دوم تو گوگل سرچ کنید از این مثالا زیاده!!