SlideShare a Scribd company logo
‫سوکت‬ ‫نویسی‬ ‫برنامه‬
‫نژاد‬ ‫یوسفی‬ ‫احمد‬
1
‫ها‬ ‫سرفصل‬
•‫سوکت‬ ‫نویسی‬ ‫برنامه‬ ‫و‬ ‫سوکت‬ ‫معرفی‬
•‫ها‬ ‫سوکت‬ ‫از‬ ‫اساسی‬ ‫مدل‬ ‫دو‬
•‫تابع‬socket–‫سوکت‬ ‫یک‬ ‫کردن‬ ‫ایجاد‬
•‫سوکت‬ ‫ساختارهای‬
•‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬
•‫های‬ ‫آدرس‬IP‫آنها‬ ‫با‬ ‫کار‬ ‫طریقه‬ ‫و‬
2
‫ها‬ ‫سرفصل‬
•‫تابع‬bind–‫هستم؟‬ ‫پرتی‬ ‫چه‬ ‫روی‬
•‫تابع‬connect–‫سالم‬!
•‫تابع‬listen–‫بگیرید‬ ‫تماس‬ ‫من‬ ‫با‬ ‫لطفا‬!
•‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬!
•‫توابع‬send‫و‬recv–‫داده‬ ‫انتقال‬
•‫تابع‬close–‫بای‬ ‫بای‬
•‫پروتکل‬ ‫در‬ ‫توابع‬ ‫استفاده‬ ‫ترتیب‬TCP
•‫پروتکل‬ ‫در‬ ‫توابع‬ ‫خالصه‬TCP‫و‬UDP
•‫منابع‬
3
‫سوکت‬ ‫نویسی‬ ‫برنامه‬ ‫و‬ ‫سوکت‬ ‫معرفی‬
•‫است‬ ‫کامپیوتری‬ ‫شبکه‬ ‫های‬ ‫تکنولوژی‬ ‫ترین‬ ‫اساسی‬ ‫از‬ ‫یکی‬ ‫سوکت‬.
•‫یک‬‫رابط‬‫شبکه‬ ‫افزار‬ ‫سخت‬ ‫و‬ ‫افزار‬ ‫نرم‬ ‫بین‬(‫انتقال‬ ‫الیه‬.)
•‫توانند‬ ‫می‬ ‫سوکت‬ ‫طریق‬ ‫از‬ ‫ها‬ ‫برنامه‬‫ارسال‬ ‫پیام‬/‫کنند‬ ‫دریافت‬‫به‬/‫های‬ ‫برنامه‬ ‫دیگر‬ ‫از‬(‫یا‬ ‫محلی‬
‫دور‬)
•‫شبکه‬ ‫محبوب‬ ‫افزارهای‬ ‫نرم‬ ‫از‬ ‫خیلی‬(‫سیستم‬ ‫و‬ ‫رسانی‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ،‫وب‬ ‫های‬ ‫مرورگر‬‫های‬
‫نقطه‬ ‫به‬ ‫نقطه‬ ‫فایل‬ ‫اشتراک‬)‫سوکت‬ ‫به‬ ‫وابسته‬‫هستند‬.
4
‫ها‬ ‫سوکت‬ ‫از‬ ‫اساسی‬ ‫مدل‬ ‫دو‬
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
‫تابع‬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
‫سوکت‬ ‫ساختارهای‬
•‫ساختار‬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
‫سوکت‬ ‫ساختارهای‬
•‫نام‬ ‫به‬ ‫دیگر‬ ‫ساختار‬ ‫یک‬ ‫دوم‬ ‫ساختار‬ ‫تعریف‬ ‫در‬in_addr‫است‬ ‫زیر‬ ‫بصورت‬ ‫که‬ ‫شده‬ ‫تعریف‬
/* Internet IP address */
struct in_addr
{
unsigned long s_addr;
};
•‫نکته‬:sin_port‫و‬sin_adr‫صورت‬ ‫به‬ ‫باید‬Network Byte Order
•‫همان‬ ‫یا‬Big Endian(‫ماند‬ ‫می‬ ‫باقی‬ ‫ابتدا‬ ‫همان‬ ‫در‬ ‫ارزش‬ ‫با‬ ‫بایت‬)‫باشند‬.
8
‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬
•Network Byte Order(‫ابتدا‬ ‫در‬ ‫اهمیت‬ ‫پر‬ ‫بایت‬(‫یا‬Big Endian
•Host Byte Order(‫ابتدا‬ ‫در‬ ‫اهمیت‬ ‫کم‬ ‫بایت‬(‫یا‬Little Endian
•‫پروتکل‬ ‫در‬TCP/IP‫بصورت‬ ‫بایتها‬ ‫ترتیب‬BE‫است‬ ‫شده‬ ‫توافق‬.
•‫ساختار‬ ‫با‬ ‫ماشینی‬ ‫روی‬ ‫شما‬ ‫برنامه‬LE‫خورد‬ ‫خواهد‬ ‫بهم‬ ‫ارسالی‬ ‫های‬ ‫بایت‬ ‫ترتیب‬ ،.
•‫نمونه‬:
• 2500$ (BE) -> 0025$ (LE)
9
‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫های‬ ‫روش‬
•‫محلی‬ ‫های‬ ‫داده‬ ‫تبدیل‬:
• htons() : BE ‫کلمات‬ ‫تبدیل‬ ‫تابع‬‫بایتی‬ ‫دو‬‫حالت‬ ‫به‬
• htonl() : BE ‫کلمات‬ ‫تبدیل‬ ‫تابع‬‫بایتی‬ ‫چهار‬‫حالت‬ ‫به‬
• ntohs() : ‫ماشین‬ ‫فعلی‬ ‫حالت‬ ‫به‬ BE ‫از‬ ‫دوبایتی‬ ‫کلمات‬ ‫تبدیل‬ ‫تابع‬
• ntohl() : ‫به‬‫ماشین‬ ‫فعلی‬ ‫حالت‬ BE ‫از‬ ‫چهاربایتی‬ ‫کلمات‬ ‫تبدیل‬ ‫تابع‬
10
‫های‬ ‫آدرس‬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
‫های‬ ‫آدرس‬IP‫آنها‬ ‫با‬ ‫کار‬ ‫طریقه‬ ‫و‬
•‫تبدیل‬ ‫برای‬IP‫رشته‬ ‫به‬:‫تابع‬inet_ntoa
• printf("%s",inet_ntoa(ina.sin_addr));
12
‫تابع‬bind–‫هستم؟‬ ‫پرتی‬ ‫چه‬ ‫روی‬
•‫سوکت‬ ‫با‬ ‫پورت‬ ‫یک‬ ‫دادن‬ ‫پیوند‬ ‫برای‬
• int status = bind(sockid, &addrport, size);
•sockfd:‫سوکتی‬ ‫مشخصه‬ ‫همان‬‫که‬‫تابع‬ ‫از‬ ‫استفاده‬ ‫با‬ ً‫ال‬‫قب‬socket‫باز‬‫اید‬ ‫کرده‬.
•my_addr:‫آدرس‬ ‫و‬ ‫پورت‬ ‫آدرس‬ ،‫سوکت‬ ‫خانواده‬ ‫که‬ ‫ساختار‬ ‫یک‬IP‫ماشین‬‫خود‬ ‫در‬ ‫را‬ ‫محلی‬
‫دارد‬.
•addr_len:‫طول‬‫ساختار‬my_addr‫بر‬‫بایت‬ ‫حسب‬
•‫مقدار‬‫بازگشتی‬-1‫است‬ ‫خطا‬ ‫بروز‬ ‫معنی‬ ‫به‬.
13
‫تابع‬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
‫تابع‬connect–‫سالم‬!
•‫دهنده‬ ‫سرویس‬ ‫یک‬ ‫به‬ ‫اتصال‬ ‫برای‬
• int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
•sockfd:‫تابع‬ ‫فراخوانی‬ ‫با‬ ‫که‬ ‫است‬ ‫سوکتی‬ ‫مشخصه‬socket‫بدست‬‫است‬ ‫آمده‬.
•serv_addr:‫نوع‬ ‫از‬ ‫ساختاری‬sockaddr‫معرفی‬ ‫قبال‬ ‫که‬ ‫است‬‫شد‬.
•addrlen:‫قبلی‬ ‫ساختار‬ ‫اندازه‬‫بر‬‫حسب‬‫بایت‬.‫مقدار‬sizeof(struct sockaddr)‫دهید‬ ‫قرار‬.
•‫ارتباط‬ ‫یک‬ ‫برقراری‬ ‫در‬ ‫موفقیت‬ ‫عدم‬ ‫صورت‬ ‫در‬TCP‫مقدار‬‫تابع‬ ‫این‬ ‫برگشتی‬1-‫خواهد‬‫بود‬.
•‫تابع‬ ‫به‬ ‫نیازی‬bind‫نیست‬.‫کند‬ ‫می‬ ‫انتخاب‬ ‫را‬ ‫پورت‬ ‫عامل‬ ‫سیستم‬ ‫چون‬.
15
‫تابع‬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
‫تابع‬listen–‫بگیرید‬ ‫تماس‬ ‫من‬ ‫با‬ ‫لطفا‬!
•‫ها‬ ‫کالینت‬ ‫طرف‬ ‫از‬ ‫وارده‬ ‫های‬ ‫اتصال‬ ‫برای‬ ‫دهنده‬ ‫سرویس‬ ‫انتظار‬
• int listen(int sockfd, int backlog);
•sockfd:‫ابتدا‬ ‫در‬ ‫که‬ ‫است‬ ‫سوکت‬ ‫مشخصه‬ ‫همان‬‫را‬ ‫آن‬‫اید‬ ‫کرده‬ ‫ایجاد‬.
•backlog:‫منتظر‬ ‫شدۀ‬ ‫صف‬ ‫به‬ ‫و‬ ‫ّق‬‫ل‬‫مع‬ ‫ارتباطات‬ ‫تعداد‬ ‫حداکثر‬.
•‫تابع‬ ‫این‬ ‫برگشتی‬ ‫مقدار‬ ‫خطا‬ ‫بروز‬ ‫صورت‬ ‫در‬1-‫بود‬ ‫خواهد‬.
•‫اینکه‬ ‫از‬ ‫قبل‬‫را‬ ‫تابع‬ ‫این‬‫تابع‬ ‫به‬ ‫کنید‬ ‫فرخوانی‬bind‫نیاز‬‫دارید‬.
• socket)(
• bind)(
• listen)(
• accept)(
17
‫تابع‬accept–‫شما‬ ‫تماس‬ ‫از‬ ‫سپاس‬!
•‫پذیرد‬ ‫می‬ ‫را‬ ‫انتظار‬ ‫حال‬ ‫در‬ ‫معلق‬ ‫های‬ ‫اتصال‬ ‫تابع‬ ‫این‬.
•‫ا‬ ‫جدید‬ ‫ارتباط‬ ‫این‬ ‫به‬ ‫تا‬ ‫گرداند‬ ‫می‬ ‫باز‬ ‫شما‬ ‫برای‬ ‫را‬ ‫جدید‬ ‫سوکت‬ ‫کننده‬ ‫توصیف‬ ‫یک‬‫آن‬ ‫طریق‬ ‫ز‬
‫نمایید‬ ‫رسیدگی‬.
• int accept(int sockfd, void *addr, int *addrlen);
•sockfd:‫تابع‬ ‫با‬ ‫ابتدا‬ ‫در‬ ‫که‬ ‫است‬ ‫سوکت‬ ‫مشخصه‬socket‫است‬ ‫آمده‬ ‫بدست‬.
•addr:‫در‬ ‫شده‬ ‫پذیرفته‬ ‫اتصال‬ ‫درباره‬ ‫اطالعات‬addr‫به‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫که‬ ‫میشود‬ ‫ذخیره‬
‫ساختار‬sockaddr_in‫است‬.
•addrlen:‫ساختار‬ ‫طول‬addr‫بایت‬ ‫حسب‬ ‫بر‬
18
‫تابع‬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
‫تابع‬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
‫توابع‬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
‫تابع‬close–‫بای‬ ‫بای‬
•‫تابع‬ ‫با‬ ‫میتوانید‬ ،‫کنید‬ ‫قطع‬ ‫را‬ ‫ارتباط‬ ‫میخواهید‬ ‫و‬ ‫شد‬ ‫تمام‬ ‫داده‬ ‫انتقال‬ ‫کار‬ ‫وقتی‬close‫این‬
‫دهید‬ ‫انجام‬ ‫را‬ ‫کار‬.
• close(int sockfd);
•sockfd:‫نظر‬ ‫مورد‬ ‫سوکت‬ ‫مشخصه‬.
•‫تابع‬ ‫توسط‬ ‫که‬ ‫ارتباطی‬close‫بسته‬‫نخو‬ ‫استفاده‬ ‫قابل‬ ‫دریافت‬ ‫و‬ ‫ارسال‬ ‫برای‬ ‫دیگر‬ ‫میشود‬‫اهد‬
‫بود‬.
22
‫دهنده‬ ‫سرویس‬ ‫برنامۀ‬ ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬(‫بر‬ ‫مبتنی‬TCP)
•‫تابع‬socket‫سوکت‬ ‫ایجاد‬ ‫برای‬
•‫تابع‬bind‫سوکت‬ ‫روی‬ ‫پورت‬ ‫کردن‬ ‫تنظیم‬ ‫برای‬
•‫تابع‬listen‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫مشتری‬ ‫تقاضای‬ ‫به‬ ‫دادن‬ ‫گوش‬ ‫برای‬
•‫تابع‬accept‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫مشتری‬ ‫تقاضای‬ ‫پذیرفتن‬ ‫برای‬
•‫توابع‬send‫و‬recv‫داده‬ ‫انتقال‬ ‫برای‬
•‫تابع‬close‫ارتباط‬ ‫بستن‬ ‫برای‬
23
‫مشتری‬ ‫برنامۀ‬ ‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬(‫بر‬ ‫مبتنی‬TCP)
•‫تابع‬socket‫سوکت‬ ‫ایجاد‬ ‫برای‬
•‫تابع‬connect‫ارتباط‬ ‫برقراری‬ ‫تقاضای‬ ‫فرستادن‬ ‫برای‬(‫شدن‬ ‫پذیرفته‬ ‫تا‬ ‫انتظار‬)
•‫توابع‬send‫و‬recv‫داده‬ ‫انتقال‬ ‫برای‬
•‫تابع‬close‫ارتباط‬ ‫بستن‬ ‫برای‬
24
‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬ ‫خالصه‬TCP
25
‫در‬ ‫استفاده‬ ‫مورد‬ ‫توابع‬ ‫خالصه‬UDP
26
‫منابع‬
27
•Unix Network Programming(Richard Stevens)
•TCP/IP Illustrated(Stevens and Gary R. Wright)
•‫اینترنت‬ ‫مهندسی‬ ‫اصول‬(‫ملکیان‬ ‫احسان‬ ‫مهندس‬)

More Related Content

PDF
SmartRecruiters Recruiting Platform
PDF
Aircall
PDF
Gavilan francisco no se lo digas a nadie asi (1)
PPTX
Entrepreneur DNA - Does It Exist?
PDF
ويبينار المتاحف الافتراضية: تجربة تفاعلية للتعلم والاستمتاع وحفظ التراث الثقافي
PDF
Product Corporate And Umbrella Branding Powerpoint Presentation Slides Brandi...
PDF
Snyk investor deck late 2015 short
PDF
Fivetran
SmartRecruiters Recruiting Platform
Aircall
Gavilan francisco no se lo digas a nadie asi (1)
Entrepreneur DNA - Does It Exist?
ويبينار المتاحف الافتراضية: تجربة تفاعلية للتعلم والاستمتاع وحفظ التراث الثقافي
Product Corporate And Umbrella Branding Powerpoint Presentation Slides Brandi...
Snyk investor deck late 2015 short
Fivetran

What's hot (20)

PPT
AppNexus' First Pitch Deck
PDF
1079 konacna pobeda
PDF
Renal Physiology - Regulation of Plasma Osmolarity
PDF
763111709-Ericsson-2212 specification and datasheet
 
PDF
Contently Pitch Deck
PDF
Monthly Khazina-e-Ruhaniyaat Apr'23 (Vol.13, Issue 12)
PDF
Manga Rosario + vampire Tomo 7
PDF
Pedro alecrim (1)
PDF
Manychat Pitch Deck
PDF
Flowtab: $50K VC investment. Flowtab's initial pitch deck
PDF
Winnie pitch deck
PDF
Shopify Investor Deck January 2016
PDF
Fighting complexity by Rémi Guyot, VP Product @BlaBlaCar
PDF
Mi vida con los Ángeles
PDF
Prazer sem medo (sobre saúde e sexualidade para mulheres lésbicas)
PDF
ZS - 0330 - Zagor - CRNA MOCVARA
PDF
Zs 0984 teks viler - neuhvatljivi proteus (scanturion & zika teror &amp...
PPTX
Egyptian Colloquial Arabic verbs
AppNexus' First Pitch Deck
1079 konacna pobeda
Renal Physiology - Regulation of Plasma Osmolarity
763111709-Ericsson-2212 specification and datasheet
 
Contently Pitch Deck
Monthly Khazina-e-Ruhaniyaat Apr'23 (Vol.13, Issue 12)
Manga Rosario + vampire Tomo 7
Pedro alecrim (1)
Manychat Pitch Deck
Flowtab: $50K VC investment. Flowtab's initial pitch deck
Winnie pitch deck
Shopify Investor Deck January 2016
Fighting complexity by Rémi Guyot, VP Product @BlaBlaCar
Mi vida con los Ángeles
Prazer sem medo (sobre saúde e sexualidade para mulheres lésbicas)
ZS - 0330 - Zagor - CRNA MOCVARA
Zs 0984 teks viler - neuhvatljivi proteus (scanturion & zika teror &amp...
Egyptian Colloquial Arabic verbs
Ad

Viewers also liked (20)

PPT
E payment 2
ODP
Go Programming Language
PPTX
PDF
IPv6 Security - Where is the Challenge?
PDF
Ipv6 Security with Mikrotik RouterOS by Wardner Maia
PDF
مجموعه آموزش های برنامه نویسی آردوینو با محوریت پروژه های رباتیک
PPTX
IPv6 Security
PPT
Java programming languages
PPTX
Eric Vyncke - IPv6 security in general
PPTX
ATMEGA 328
PPTX
IPv6 Security Challenges: TechNet Augusta 2015
PPT
War field spying robot
PPTX
Seminar on Body Area Networks
PPTX
War Field Spying Robot with Fire Fighting Alarm.
PPTX
Implementation & Challenges of IPv6
PPTX
Wireless Body Area Networks
DOCX
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
PPTX
Wban
PPTX
Android controlled robot
PPTX
Wireless Body Sensor Networks
E payment 2
Go Programming Language
IPv6 Security - Where is the Challenge?
Ipv6 Security with Mikrotik RouterOS by Wardner Maia
مجموعه آموزش های برنامه نویسی آردوینو با محوریت پروژه های رباتیک
IPv6 Security
Java programming languages
Eric Vyncke - IPv6 security in general
ATMEGA 328
IPv6 Security Challenges: TechNet Augusta 2015
War field spying robot
Seminar on Body Area Networks
War Field Spying Robot with Fire Fighting Alarm.
Implementation & Challenges of IPv6
Wireless Body Area Networks
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Wban
Android controlled robot
Wireless Body Sensor Networks
Ad

Similar to Socket Programming in C++ (20)

PPSX
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
PPT
TCP IP description and layering in OSI model
PPTX
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
PPSX
آشنایی با Opnet
PPSX
آزمایشگاه شبکه‏های کامپیوتری
PPSX
برنامه سازی شبکه: مقدمه شبکه
PDF
13940110-Network-Devices_ver7.41
PPTX
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
PDF
khazeni_taghizade
PPTX
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
PPTX
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
PPTX
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
DOC
پروژه مسيرياب
PPTX
uino projecttttttttttttttttttttttttt.pptx
PPSX
درس مهنسی اینترنت فصل 1شبکه
PDF
پروژه مسیریاب
PPTX
پروتکل TCP/IP
PDF
avr project , sim808l, mmc card
PDF
Pdn tech-netfilter&iptables-ver2.1.0
PDF
Pdn tech-netfilter&iptables-ver2.1.0
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
TCP IP description and layering in OSI model
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
آشنایی با Opnet
آزمایشگاه شبکه‏های کامپیوتری
برنامه سازی شبکه: مقدمه شبکه
13940110-Network-Devices_ver7.41
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
khazeni_taghizade
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
پروژه مسيرياب
uino projecttttttttttttttttttttttttt.pptx
درس مهنسی اینترنت فصل 1شبکه
پروژه مسیریاب
پروتکل TCP/IP
avr project , sim808l, mmc card
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0

Socket Programming in C++

  • 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) •‫اینترنت‬ ‫مهندسی‬ ‫اصول‬(‫ملکیان‬ ‫احسان‬ ‫مهندس‬)