SlideShare a Scribd company logo
1 of 27
Download to read offline
‫سوکت‬ ‫نویسی‬ ‫برنامه‬
‫نژاد‬ ‫یوسفی‬ ‫احمد‬
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

Viewers also liked

Java programming languages
Java programming languagesJava programming languages
Java programming languagesjavadib
 
Eric Vyncke - IPv6 security in general
Eric Vyncke - IPv6 security in generalEric Vyncke - IPv6 security in general
Eric Vyncke - IPv6 security in generalIKT-Norge
 
IPv6 Security Challenges: TechNet Augusta 2015
IPv6 Security Challenges: TechNet Augusta 2015IPv6 Security Challenges: TechNet Augusta 2015
IPv6 Security Challenges: TechNet Augusta 2015AFCEA International
 
War field spying robot
War field spying robotWar field spying robot
War field spying robotARUN S L
 
Seminar on Body Area Networks
Seminar on Body Area NetworksSeminar on Body Area Networks
Seminar on Body Area NetworksVinayak Narayanan
 
War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.vansh_raheja
 
Implementation & Challenges of IPv6
Implementation & Challenges of IPv6Implementation & Challenges of IPv6
Implementation & Challenges of IPv6 Farwa Ansari
 
Wireless Body Area Networks
Wireless Body Area Networks Wireless Body Area Networks
Wireless Body Area Networks Musfiqur Rahman
 
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)Farwa Ansari
 
Android controlled robot
Android controlled robotAndroid controlled robot
Android controlled robotSatyendra Gupta
 
Wireless Body Area Network
Wireless Body Area NetworkWireless Body Area Network
Wireless Body Area NetworkFaheema Monica
 
Wireless Body Area Networking
Wireless Body Area NetworkingWireless Body Area Networking
Wireless Body Area Networkingsubhradeep mitra
 
Arduino bluetooth controlled robot
Arduino bluetooth controlled robotArduino bluetooth controlled robot
Arduino bluetooth controlled robotUVSofts Technologies
 
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATION
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATIONBLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATION
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATIONVarun Divekar
 
Wireless body area network
Wireless body area networkWireless body area network
Wireless body area networkPratik Gondaliya
 
Android controlled robot
Android controlled robotAndroid controlled robot
Android controlled robotBen Johnke
 

Viewers also liked (20)

Java programming languages
Java programming languagesJava programming languages
Java programming languages
 
Eric Vyncke - IPv6 security in general
Eric Vyncke - IPv6 security in generalEric Vyncke - IPv6 security in general
Eric Vyncke - IPv6 security in general
 
ATMEGA 328
ATMEGA 328ATMEGA 328
ATMEGA 328
 
IPv6 Security Challenges: TechNet Augusta 2015
IPv6 Security Challenges: TechNet Augusta 2015IPv6 Security Challenges: TechNet Augusta 2015
IPv6 Security Challenges: TechNet Augusta 2015
 
War field spying robot
War field spying robotWar field spying robot
War field spying robot
 
Seminar on Body Area Networks
Seminar on Body Area NetworksSeminar on Body Area Networks
Seminar on Body Area Networks
 
War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.
 
Implementation & Challenges of IPv6
Implementation & Challenges of IPv6Implementation & Challenges of IPv6
Implementation & Challenges of IPv6
 
Wireless Body Area Networks
Wireless Body Area Networks Wireless Body Area Networks
Wireless Body Area Networks
 
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
 
Wban
WbanWban
Wban
 
Android controlled robot
Android controlled robotAndroid controlled robot
Android controlled robot
 
Wireless Body Sensor Networks
Wireless Body Sensor Networks Wireless Body Sensor Networks
Wireless Body Sensor Networks
 
Wireless Body Area Network
Wireless Body Area NetworkWireless Body Area Network
Wireless Body Area Network
 
Wireless Body Area Networking
Wireless Body Area NetworkingWireless Body Area Networking
Wireless Body Area Networking
 
Arduino bluetooth controlled robot
Arduino bluetooth controlled robotArduino bluetooth controlled robot
Arduino bluetooth controlled robot
 
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATION
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATIONBLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATION
BLUETOOTH CONTROL ROBOT WITH ANDROID APPLICATION
 
Wireless body area network
Wireless body area networkWireless body area network
Wireless body area network
 
Body Area Network
Body Area NetworkBody Area Network
Body Area Network
 
Android controlled robot
Android controlled robotAndroid controlled robot
Android controlled robot
 

Similar to Socket Programming in C++

برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپبرنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپNavid Einakchi
 
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت   تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت abbas pirnazaraine
 
آزمایشگاه شبکه‏های کامپیوتری
آزمایشگاه شبکه‏های کامپیوتریآزمایشگاه شبکه‏های کامپیوتری
آزمایشگاه شبکه‏های کامپیوتریguest6b58d0df
 
برنامه سازی شبکه: مقدمه شبکه
برنامه سازی شبکه: مقدمه شبکه برنامه سازی شبکه: مقدمه شبکه
برنامه سازی شبکه: مقدمه شبکه Navid Einakchi
 
13940110-Network-Devices_ver7.41
13940110-Network-Devices_ver7.4113940110-Network-Devices_ver7.41
13940110-Network-Devices_ver7.41Ehsan Khanahmadi
 
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.iraminnezarat
 
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنتتنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنتabbas pirnazaraine
 
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم  به اینترنتتنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم  به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنتabbas pirnazaraine
 
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...aminnezarat
 
پروژه مسيرياب
پروژه مسيريابپروژه مسيرياب
پروژه مسيريابarichoana
 
درس مهنسی اینترنت فصل 1شبکه
درس مهنسی اینترنت فصل 1شبکهدرس مهنسی اینترنت فصل 1شبکه
درس مهنسی اینترنت فصل 1شبکهNavid Einakchi
 
پروژه مسیریاب
پروژه مسیریابپروژه مسیریاب
پروژه مسیریابarichoana
 
avr project , sim808l, mmc card
avr project , sim808l, mmc cardavr project , sim808l, mmc card
avr project , sim808l, mmc cardPooriaKeihani
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0pdnsoftco
 
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.iraminnezarat
 
مهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهمهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهNavid Einakchi
 

Similar to Socket Programming in C++ (20)

برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپبرنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
برنامه سازی شبکه: برنامه نویسی سوکت در سی شارپ
 
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت   تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
تنظیم فایروال میکروتیک برای دسترسی سیستمها به اینترنت
 
آشنایی با Opnet
آشنایی با Opnetآشنایی با Opnet
آشنایی با Opnet
 
آزمایشگاه شبکه‏های کامپیوتری
آزمایشگاه شبکه‏های کامپیوتریآزمایشگاه شبکه‏های کامپیوتری
آزمایشگاه شبکه‏های کامپیوتری
 
برنامه سازی شبکه: مقدمه شبکه
برنامه سازی شبکه: مقدمه شبکه برنامه سازی شبکه: مقدمه شبکه
برنامه سازی شبکه: مقدمه شبکه
 
13940110-Network-Devices_ver7.41
13940110-Network-Devices_ver7.4113940110-Network-Devices_ver7.41
13940110-Network-Devices_ver7.41
 
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
02 vectorization fundamentals_of_parallelism_and_code_optimization-www.astek.ir
 
khazeni_taghizade
khazeni_taghizadekhazeni_taghizade
khazeni_taghizade
 
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنتتنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
 
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم  به اینترنتتنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم  به اینترنت
تنظیم و پیکربندی مودم وایرلس برای دسترسی سیستمهای بی سیم به اینترنت
 
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
04 memory traffic_fundamentals_of_parallelism_and_code_optimization-www.astek...
 
پروژه مسيرياب
پروژه مسيريابپروژه مسيرياب
پروژه مسيرياب
 
درس مهنسی اینترنت فصل 1شبکه
درس مهنسی اینترنت فصل 1شبکهدرس مهنسی اینترنت فصل 1شبکه
درس مهنسی اینترنت فصل 1شبکه
 
پروژه مسیریاب
پروژه مسیریابپروژه مسیریاب
پروژه مسیریاب
 
پروتکل TCP/IP
پروتکل TCP/IP پروتکل TCP/IP
پروتکل TCP/IP
 
avr project , sim808l, mmc card
avr project , sim808l, mmc cardavr project , sim808l, mmc card
avr project , sim808l, mmc card
 
Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0Pdn tech-netfilter&iptables-ver2.1.0
Pdn tech-netfilter&iptables-ver2.1.0
 
Network
NetworkNetwork
Network
 
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
03 open mp_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
 
مهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهمهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکه
 

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