• Like
Socket Programming in C++
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Socket Programming in C++

  • 89 views
Published

Quick Learning Socket Programming in C++

Quick Learning Socket Programming in C++

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
89
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ‫سوکت‬ ‫نویسی‬ ‫برنامه‬ ‫نژاد‬ ‫یوسفی‬ ‫احمد‬ 1
  • 2. ‫ها‬ ‫سرفصل‬ •‫سوکت‬ ‫نویسی‬ ‫برنامه‬ ‫و‬ ‫سوکت‬ ‫معرفی‬ •‫ها‬ ‫سوکت‬ ‫از‬ ‫اساسی‬ ‫مدل‬ ‫دو‬ •‫تابع‬socket–‫سوکت‬ ‫یک‬ ‫کردن‬ ‫ایجاد‬ •‫سوکت‬ ‫ساختارهای‬ •‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬ •‫های‬ ‫آدرس‬IP‫آنها‬ ‫با‬ ‫کار‬ ‫طریقه‬ ‫و‬ 2
  • 3. ‫ها‬ ‫سرفصل‬ •‫تابع‬bind–‫هستم؟‬ ‫پرتی‬ ‫چه‬ ‫روی‬ •‫تابع‬connect–‫سالم‬! •‫تابع‬listen–‫بگیرید‬ ‫تماس‬ ‫من‬ ‫با‬ ‫لطفا‬! •‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬! •‫توابع‬send‫و‬recv–‫داده‬ ‫انتقال‬ •‫تابع‬close–‫بای‬ ‫بای‬ •‫پروتکل‬ ‫در‬ ‫توابع‬ ‫استفاده‬ ‫ترتیب‬TCP •‫پروتکل‬ ‫در‬ ‫توابع‬ ‫خالصه‬TCP‫و‬UDP •‫منابع‬ 3
  • 4. ‫سوکت‬ ‫نویسی‬ ‫برنامه‬ ‫و‬ ‫سوکت‬ ‫معرفی‬ •‫است‬ ‫کامپیوتری‬ ‫شبکه‬ ‫های‬ ‫تکنولوژی‬ ‫ترین‬ ‫اساسی‬ ‫از‬ ‫یکی‬ ‫سوکت‬. •‫یک‬‫رابط‬‫شبکه‬ ‫افزار‬ ‫سخت‬ ‫و‬ ‫افزار‬ ‫نرم‬ ‫بین‬(‫انتقال‬ ‫الیه‬.) •‫توانند‬ ‫می‬ ‫سوکت‬ ‫طریق‬ ‫از‬ ‫ها‬ ‫برنامه‬‫ارسال‬ ‫پیام‬/‫کنند‬ ‫دریافت‬‫به‬/‫های‬ ‫برنامه‬ ‫دیگر‬ ‫از‬(‫یا‬ ‫محلی‬ ‫دور‬) •‫شبکه‬ ‫محبوب‬ ‫افزارهای‬ ‫نرم‬ ‫از‬ ‫خیلی‬(‫سیستم‬ ‫و‬ ‫رسانی‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ،‫وب‬ ‫های‬ ‫مرورگر‬‫های‬ ‫نقطه‬ ‫به‬ ‫نقطه‬ ‫فایل‬ ‫اشتراک‬)‫سوکت‬ ‫به‬ ‫وابسته‬‫هستند‬. 4
  • 5. ‫ها‬ ‫سوکت‬ ‫از‬ ‫اساسی‬ ‫مدل‬ ‫دو‬ Stream Sockets (SOCK_STREAM) ‫پروتکل‬ ‫بر‬ ‫مبنی‬TCP ‫اعتماد‬ ‫قابل‬ ‫ی‬ ‫طرفه‬ ‫دو‬ ‫ارتباطات‬ ‫باشد‬ ‫برقرار‬ ‫اتصال‬ ‫باید‬ ‫ارتباط‬ ‫برای‬ ‫شود‬ ‫می‬ ‫تضمین‬ ‫ترتیب‬ Datagram Sockets(SOCK_DGRAM) ‫پروتکل‬ ‫بر‬ ‫منبی‬UDP ‫اعتماد‬ ‫قابل‬ ‫غیر‬ ‫اتصال‬ ‫نیست‬ ‫تضمین‬ ‫ترتیب‬ ‫اتصال‬ ‫بدون‬ ‫ارتباط‬ 5 App socket 3 2 1 Dest. App socket 3 2 1 D1 D3 D2
  • 6. ‫تابع‬socket–‫سوکت‬ ‫یک‬ ‫کردن‬ ‫ایجاد‬ • int s = socket(int domain, int type, int protocol); •S:‫نوع‬ ‫از‬ ،‫سوکت‬ ‫گر‬ ‫توصیف‬int(‫فایل‬ ‫با‬ ‫کار‬ ‫مانند‬) •Domain:‫پارامتر‬ ‫با‬ ‫باید‬ ‫دامنه‬PF_INET‫شود‬ ‫مقداردهی‬. •Type:‫ثابت‬ ،‫ارتباط‬ ‫نوع‬SOCK_STREAM‫یا‬SOCK_DGRAM •Protocol:‫شود‬ ‫انتخاب‬ ‫ارتباط‬ ‫نوع‬ ‫براساس‬ ‫تا‬ ‫دهید‬ ‫قرار‬ ‫صفر‬ ‫را‬ ‫پروتکل‬. •‫اند‬ ‫ثابت‬ ‫همیشه‬ ‫اینترنت‬ ‫شبکه‬ ‫تحت‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫سوم‬ ‫و‬ ‫اول‬ ‫فیلد‬. •‫مثال‬: • int sockfd; • sockfd = socket (PF_INET, SOCK_STREAM, 0); 6
  • 7. ‫سوکت‬ ‫ساختارهای‬ •‫ساختار‬sockaddr:‫میکند‬ ‫داری‬ ‫نگه‬ ‫ها‬ ‫سوکت‬ ‫از‬ ‫زیادی‬ ‫انواع‬ ‫آدرس‬ ‫اطالعات‬. struct sockaddr { unsigned shot sa_family; // address family, AF_XXX char sa_data[14]; //14 bytes of protocol address }; •‫ساختار‬:sockaddr_in‫کند‬ ‫می‬ ‫ساده‬ ‫را‬ ‫سوکت‬ ‫آدرس‬ ‫های‬ ‫المان‬ ‫با‬ ‫کار‬ ‫که‬ ‫قبلی‬ ‫همتا‬ ‫ساختار‬ ‫یک‬. struct sockaddr_in { short int sin_family; //Address family unsigned short int sin_port; // Port number struct in_addr sin_addr; //Internet address unsigned char sin_zero[8]; //Same size as struct sockaddr }; 7
  • 8. ‫سوکت‬ ‫ساختارهای‬ •‫نام‬ ‫به‬ ‫دیگر‬ ‫ساختار‬ ‫یک‬ ‫دوم‬ ‫ساختار‬ ‫تعریف‬ ‫در‬in_addr‫است‬ ‫زیر‬ ‫بصورت‬ ‫که‬ ‫شده‬ ‫تعریف‬ /* Internet IP address */ struct in_addr { unsigned long s_addr; }; •‫نکته‬:sin_port‫و‬sin_adr‫صورت‬ ‫به‬ ‫باید‬Network Byte Order •‫همان‬ ‫یا‬Big Endian(‫ماند‬ ‫می‬ ‫باقی‬ ‫ابتدا‬ ‫همان‬ ‫در‬ ‫ارزش‬ ‫با‬ ‫بایت‬)‫باشند‬. 8
  • 9. ‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬ •Network Byte Order(‫ابتدا‬ ‫در‬ ‫اهمیت‬ ‫پر‬ ‫بایت‬(‫یا‬Big Endian •Host Byte Order(‫ابتدا‬ ‫در‬ ‫اهمیت‬ ‫کم‬ ‫بایت‬(‫یا‬Little Endian •‫پروتکل‬ ‫در‬TCP/IP‫بصورت‬ ‫بایتها‬ ‫ترتیب‬BE‫است‬ ‫شده‬ ‫توافق‬. •‫ساختار‬ ‫با‬ ‫ماشینی‬ ‫روی‬ ‫شما‬ ‫برنامه‬LE‫خورد‬ ‫خواهد‬ ‫بهم‬ ‫ارسالی‬ ‫های‬ ‫بایت‬ ‫ترتیب‬ ،. •‫نمونه‬: • 2500$ (BE) -> 0025$ (LE) 9
  • 10. ‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬ •‫محلی‬ ‫های‬ ‫داده‬ ‫تبدیل‬: • htons() : BE ‫کلمات‬ ‫تبدیل‬ ‫تابع‬‫بایتی‬ ‫دو‬‫حالت‬ ‫به‬ • htonl() : BE ‫کلمات‬ ‫تبدیل‬ ‫تابع‬‫بایتی‬ ‫چهار‬‫حالت‬ ‫به‬ • ntohs() : ‫ماشین‬ ‫فعلی‬ ‫حالت‬ ‫به‬ BE ‫از‬ ‫دوبایتی‬ ‫کلمات‬ ‫تبدیل‬ ‫تابع‬ • ntohl() : ‫به‬‫ماشین‬ ‫فعلی‬ ‫حالت‬ BE ‫از‬ ‫چهاربایتی‬ ‫کلمات‬ ‫تبدیل‬ ‫تابع‬ 10
  • 11. ‫های‬ ‫آدرس‬IP‫آنها‬ ‫با‬ ‫کار‬ ‫طریقه‬ ‫و‬ • int inet_aton(const char *cp, struct in_addr *inp); •‫آدرس‬ ‫برای‬ ‫رشته‬IP‫کند‬ ‫می‬ ‫تبدیل‬ ‫آدرس‬ ‫ساختار‬ ‫یک‬ ‫به‬ ‫را‬ ‫آن‬ ‫و‬ ‫میگیرد‬. •‫به‬ ‫تبدیل‬ ‫برای‬ ‫نیازی‬BE‫ندارید‬. struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); inet_aton(“10.0.0.5”,&(my_addr.sin_addr)); memset(&(my_addr.sin_zero),'0',8); •‫شکست‬ ‫برای‬ ‫صفر‬ ‫و‬ ،‫صفر‬ ‫غیر‬ ‫عددی‬ ‫موفقیت‬ ‫برای‬ ‫بازگشتی‬ ‫مقدار‬ 11
  • 12. ‫های‬ ‫آدرس‬IP‫آنها‬ ‫با‬ ‫کار‬ ‫طریقه‬ ‫و‬ •‫تبدیل‬ ‫برای‬IP‫رشته‬ ‫به‬:‫تابع‬inet_ntoa • printf("%s",inet_ntoa(ina.sin_addr)); 12
  • 13. ‫تابع‬bind–‫هستم؟‬ ‫پرتی‬ ‫چه‬ ‫روی‬ •‫سوکت‬ ‫با‬ ‫پورت‬ ‫یک‬ ‫دادن‬ ‫پیوند‬ ‫برای‬ • int status = bind(sockid, &addrport, size); •sockfd:‫سوکتی‬ ‫مشخصه‬ ‫همان‬‫که‬‫تابع‬ ‫از‬ ‫استفاده‬ ‫با‬ ً‫ال‬‫قب‬socket‫باز‬‫اید‬ ‫کرده‬. •my_addr:‫آدرس‬ ‫و‬ ‫پورت‬ ‫آدرس‬ ،‫سوکت‬ ‫خانواده‬ ‫که‬ ‫ساختار‬ ‫یک‬IP‫ماشین‬‫خود‬ ‫در‬ ‫را‬ ‫محلی‬ ‫دارد‬. •addr_len:‫طول‬‫ساختار‬my_addr‫بر‬‫بایت‬ ‫حسب‬ •‫مقدار‬‫بازگشتی‬-1‫است‬ ‫خطا‬ ‫بروز‬ ‫معنی‬ ‫به‬. 13
  • 14. ‫تابع‬bind–‫هستم؟‬ ‫پرتی‬ ‫چه‬ ‫روی‬ •‫مرحله‬ ‫این‬ ‫تا‬ ‫کامل‬ ‫نمونه‬ ‫یک‬ Int sockfd; struct sockaddr_in my_addr; sockfd = socket(PF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = inet_addr ("172.28.44.57"); memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); // ‫احتمالی‬ ‫خطاهای‬ ‫بررسی‬ 14
  • 15. ‫تابع‬connect–‫سالم‬! •‫دهنده‬ ‫سرویس‬ ‫یک‬ ‫به‬ ‫اتصال‬ ‫برای‬ • int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); •sockfd:‫تابع‬ ‫فراخوانی‬ ‫با‬ ‫که‬ ‫است‬ ‫سوکتی‬ ‫مشخصه‬socket‫بدست‬‫است‬ ‫آمده‬. •serv_addr:‫نوع‬ ‫از‬ ‫ساختاری‬sockaddr‫معرفی‬ ‫قبال‬ ‫که‬ ‫است‬‫شد‬. •addrlen:‫قبلی‬ ‫ساختار‬ ‫اندازه‬‫بر‬‫حسب‬‫بایت‬.‫مقدار‬sizeof(struct sockaddr)‫دهید‬ ‫قرار‬. •‫ارتباط‬ ‫یک‬ ‫برقراری‬ ‫در‬ ‫موفقیت‬ ‫عدم‬ ‫صورت‬ ‫در‬TCP‫مقدار‬‫تابع‬ ‫این‬ ‫برگشتی‬1-‫خواهد‬‫بود‬. •‫تابع‬ ‫به‬ ‫نیازی‬bind‫نیست‬.‫کند‬ ‫می‬ ‫انتخاب‬ ‫را‬ ‫پورت‬ ‫عامل‬ ‫سیستم‬ ‫چون‬. 15
  • 16. ‫تابع‬connect–‫سالم‬! •‫مثال‬ #define DEST_IP "172.28.44.57" #define DEST_PORT 5000 main(){ Int sockfd; struct sockaddr_in dest_addr; // will hold the destination addr Sockfd = socket(PF_INET, SOCK_STREAM, 0); dest_addr.sin_family = AF_INET; // host byte order dest_addr.sin_port = htons(DEST_PORT); // network byte order dest_addr.sin_addr.s_addr = inet_addr(DEST_IP); memset(&(dest_addr.sin_zero), '0', 8); // zero the rest of the struct connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)); // ‫احتمالی‬ ‫خطاهای‬ ‫بررسی‬ 16
  • 17. ‫تابع‬listen–‫بگیرید‬ ‫تماس‬ ‫من‬ ‫با‬ ‫لطفا‬! •‫ها‬ ‫کالینت‬ ‫طرف‬ ‫از‬ ‫وارده‬ ‫های‬ ‫اتصال‬ ‫برای‬ ‫دهنده‬ ‫سرویس‬ ‫انتظار‬ • int listen(int sockfd, int backlog); •sockfd:‫ابتدا‬ ‫در‬ ‫که‬ ‫است‬ ‫سوکت‬ ‫مشخصه‬ ‫همان‬‫را‬ ‫آن‬‫اید‬ ‫کرده‬ ‫ایجاد‬. •backlog:‫منتظر‬ ‫شدۀ‬ ‫صف‬ ‫به‬ ‫و‬ ‫ّق‬‫ل‬‫مع‬ ‫ارتباطات‬ ‫تعداد‬ ‫حداکثر‬. •‫تابع‬ ‫این‬ ‫برگشتی‬ ‫مقدار‬ ‫خطا‬ ‫بروز‬ ‫صورت‬ ‫در‬1-‫بود‬ ‫خواهد‬. •‫اینکه‬ ‫از‬ ‫قبل‬‫را‬ ‫تابع‬ ‫این‬‫تابع‬ ‫به‬ ‫کنید‬ ‫فرخوانی‬bind‫نیاز‬‫دارید‬. • socket)( • bind)( • listen)( • accept)( 17
  • 18. ‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬! •‫پذیرد‬ ‫می‬ ‫را‬ ‫انتظار‬ ‫حال‬ ‫در‬ ‫معلق‬ ‫های‬ ‫اتصال‬ ‫تابع‬ ‫این‬. •‫ا‬ ‫جدید‬ ‫ارتباط‬ ‫این‬ ‫به‬ ‫تا‬ ‫گرداند‬ ‫می‬ ‫باز‬ ‫شما‬ ‫برای‬ ‫را‬ ‫جدید‬ ‫سوکت‬ ‫کننده‬ ‫توصیف‬ ‫یک‬‫آن‬ ‫طریق‬ ‫ز‬ ‫نمایید‬ ‫رسیدگی‬. • int accept(int sockfd, void *addr, int *addrlen); •sockfd:‫تابع‬ ‫با‬ ‫ابتدا‬ ‫در‬ ‫که‬ ‫است‬ ‫سوکت‬ ‫مشخصه‬socket‫است‬ ‫آمده‬ ‫بدست‬. •addr:‫در‬ ‫شده‬ ‫پذیرفته‬ ‫اتصال‬ ‫درباره‬ ‫اطالعات‬addr‫به‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫که‬ ‫میشود‬ ‫ذخیره‬ ‫ساختار‬sockaddr_in‫است‬. •addrlen:‫ساختار‬ ‫طول‬addr‫بایت‬ ‫حسب‬ ‫بر‬ 18
  • 19. ‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬! ‫مثال‬: #define MYPORT 3490 // the port users will be connecting to #define BACKLOG 10 // pending connections queue will hold main(){ int sockfd, new_fd; // listen on sock_fd, new connection on new_fd struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information int sin_size; sockfd = socket(PF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // auto-fill with my IP memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct 19
  • 20. ‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬! ‫ادامه‬: bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); listen(sockfd, BACKLOG); sin_size = sizeof(struct sockaddr_in); new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size); •‫از‬ ‫بایستی‬ ‫ها‬ ‫داده‬ ‫دریافت‬ ‫یا‬ ‫ارسال‬ ‫برای‬‫جدیدی‬ ‫سوکت‬‫تابع‬ ‫توسط‬ ‫آن‬ ‫مشخصه‬ ‫که‬accept ‫کنید‬ ‫استفاده‬ ، ‫برمیگردد‬. 20
  • 21. ‫توابع‬send‫و‬recv–‫داده‬ ‫انتقال‬ •‫بوده‬ ‫استفاده‬ ‫قابل‬ ‫مشتری‬ ‫سمت‬ ‫برنامه‬ ‫و‬ ‫دهنده‬ ‫سرویس‬ ‫سمت‬ ‫برنامه‬ ‫در‬ ‫تابع‬ ‫دو‬ ‫این‬. •‫دارند‬ ‫کاربرد‬ ‫ها‬ ‫داده‬ ‫مبادله‬ ‫برای‬. • int send(int sockfd, const void *msg, int len, int flags); • int recv(int sockfd, void *buf, int len, unsigned int flags); •sockfd:‫تابع‬ ‫از‬ ‫که‬ ‫سوکتی‬ ‫مشخصه‬accept‫است‬ ‫آمده‬ ‫بدست‬. •msg:‫تایع‬ ‫در‬ ‫پارامتر‬ ‫این‬send‫محلی‬‫حافظه‬ ‫در‬(‫ساختار‬ ‫یا‬ ‫آرایه‬ ‫مثل‬)‫آنجا‬ ‫از‬ ‫ارسالی‬ ‫های‬ ‫داده‬ ‫که‬ ‫داده‬ ‫فیلد‬ ‫درون‬ ‫و‬ ‫شده‬ ‫استخراج‬‫قرار‬‫شوند‬ ‫می‬ ‫ارسال‬ ‫و‬ ‫گرفته‬. •len:‫طول‬‫های‬ ‫داده‬‫حسب‬ ‫بر‬ ‫دریافتی‬ ‫یا‬ ‫ارسالی‬‫بایت‬. •flags:‫بگذارید‬ ‫صفر‬ ‫آن‬ ‫در‬ ‫فقط‬ ‫پیچیدگی‬ ‫از‬ ‫پرهیز‬ ‫برای‬. •buf:‫تابع‬ ‫در‬ ‫پارامتر‬ ‫این‬recv‫گرفته‬ ‫قرار‬ ‫آنجا‬ ‫در‬ ‫دریافتی‬ ‫های‬ ‫داده‬ ‫که‬ ‫است‬ ‫حافظه‬ ‫در‬ ‫محلی‬ ‫آدرس‬ ‫شود‬ ‫می‬ ‫گردانده‬ ‫باز‬ ‫برنامه‬ ‫به‬ ‫و‬. 21
  • 22. ‫تابع‬close–‫بای‬ ‫بای‬ •‫تابع‬ ‫با‬ ‫میتوانید‬ ،‫کنید‬ ‫قطع‬ ‫را‬ ‫ارتباط‬ ‫میخواهید‬ ‫و‬ ‫شد‬ ‫تمام‬ ‫داده‬ ‫انتقال‬ ‫کار‬ ‫وقتی‬close‫این‬ ‫دهید‬ ‫انجام‬ ‫را‬ ‫کار‬. • close(int sockfd); •sockfd:‫نظر‬ ‫مورد‬ ‫سوکت‬ ‫مشخصه‬. •‫تابع‬ ‫توسط‬ ‫که‬ ‫ارتباطی‬close‫بسته‬‫نخو‬ ‫استفاده‬ ‫قابل‬ ‫دریافت‬ ‫و‬ ‫ارسال‬ ‫برای‬ ‫دیگر‬ ‫میشود‬‫اهد‬ ‫بود‬. 22
  • 23. ‫دهنده‬ ‫سرویس‬ ‫برنامۀ‬ ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬(‫بر‬ ‫مبتنی‬TCP) •‫تابع‬socket‫سوکت‬ ‫ایجاد‬ ‫برای‬ •‫تابع‬bind‫سوکت‬ ‫روی‬ ‫پورت‬ ‫کردن‬ ‫تنظیم‬ ‫برای‬ •‫تابع‬listen‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫مشتری‬ ‫تقاضای‬ ‫به‬ ‫دادن‬ ‫گوش‬ ‫برای‬ •‫تابع‬accept‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫مشتری‬ ‫تقاضای‬ ‫پذیرفتن‬ ‫برای‬ •‫توابع‬send‫و‬recv‫داده‬ ‫انتقال‬ ‫برای‬ •‫تابع‬close‫ارتباط‬ ‫بستن‬ ‫برای‬ 23
  • 24. ‫مشتری‬ ‫برنامۀ‬ ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬(‫بر‬ ‫مبتنی‬TCP) •‫تابع‬socket‫سوکت‬ ‫ایجاد‬ ‫برای‬ •‫تابع‬connect‫ارتباط‬ ‫برقراری‬ ‫تقاضای‬ ‫فرستادن‬ ‫برای‬(‫شدن‬ ‫پذیرفته‬ ‫تا‬ ‫انتظار‬) •‫توابع‬send‫و‬recv‫داده‬ ‫انتقال‬ ‫برای‬ •‫تابع‬close‫ارتباط‬ ‫بستن‬ ‫برای‬ 24
  • 25. ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬ ‫خالصه‬TCP 25
  • 26. ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬ ‫خالصه‬UDP 26
  • 27. ‫منابع‬ 27 •Unix Network Programming(Richard Stevens) •TCP/IP Illustrated(Stevens and Gary R. Wright) •‫اینترنت‬ ‫مهندسی‬ ‫اصول‬(‫ملکیان‬ ‫احسان‬ ‫مهندس‬)