More Related Content Similar to Socket Programming in C++ (20) 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