رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'socket'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی جامعه‌ی برنامه‌نویسان
    • مقالات و اسناد مشاوره‌ای
    • مرکز چالش برانگیز برنامه‌نویسان
    • رمز‌های موفقیت
    • ابزار‌ها و نرم‌افزارهای کاربردی برنامه‌نویسان حرفه‌ای
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
    • مباحث آموزشی مرتبط با سیستم‌عامل
  • بانک‌های اطلاعاتی
    • پایگاه داده MySQL
    • پایگاه داده PostgreSQL
    • پایگاه داده SQLite
    • پایگاه داده MongoDB
    • پایگاه داده SQL Server
    • دیگر پایگاه‌های داده
  • برنامه نویسی تحت محصولات اپل
    • محیط توسعه Xcode
    • برنامه نویسی با Objective-C
    • برنامه نویسی با Swift
  • برنامه نویسی تحت محصولات مایکروسافت
    • محیط توسعه Visual Studio
    • برنامه نویسی در ASP.NET MVC
    • برنامه نویسی با #C
    • برنامه نویسی با Visual Basic.Net
    • طراحی و توسعه تحت Wpf
    • طراحی و توسعه تحت Universal و Fluent
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
    • طراحی رابط کاربری (UI)
    • طراحی تجربه کاربری (UX)
  • درخواست انجام پروژه (ویژه)
    • پروژه‌های منبع‌باز
  • سوالات و مباحث عامیانه
    • سوالات دانشجویی
    • فناوری و سخت افزار
    • سوالات مشاوره‌ای و تخصصی مرتبط با حوزه‌ی برنامه‌نویسی
  • سطل آشغال
    • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • مجوز‌های نرم‌افزاری
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


شناسه گیت‌هاب


شناسه لینکدین


شهر

3 نتیجه پیدا شد

  1. kambiz behnia

    باسلام تقریبا مدت زیادی است که درگیر Socket programming و Thread هستم. و هر چند وقت یکبار سوالاتی را در مورد چگونگی استفاده از آنها در فروم های مختلف مطرح و تا حدودی پاسخ خود را یافته ام. با توجه به اینکه گذشت زمان سوالات و شرایط تغییر کرده و لذا خواستم سوالاتی از این دست را یکبار دیگر از ابتدا مطرح و جواب کاملی برای هر کدام داشته باشم. اگر چه امکان دارد جواب هرکدام از این سوالات بطور پراکنده و جداگانه در سایتهای مختلف موجود باشد. علاوه بر آن کمتر جایی یدم که این دو موضوع را با هم بررسی کرده باشند یا فقط به مبحث Thread پرداخته اند ویا فقط درباره Socket توضیح داده اند آن هم فقط در مورد بعضی از توابع مرتبط. حتما دوستان با ترتیب اجرای دستورات و نحوه ایجاد و مفهوم سوکتهای سمت سرور و کلاینت آشنا هستند و هفت نحوه استفاده از آنها نیست بلکه هدف این است اگر من بخواهم از این توابع در Thread های مختلف استفاده کنم آیا امکان پذیر است. آیا پاسخ های داده شده برای محیط Windows, Linux, ... هردو درست است علاوه بر کتابخانه های همراه کمپایلرها کتابخانه های دیگری نظیر Boost - Poco - ACE - Qt - ... هم کتابخانه ای برای کار با شبکه دارند وضعیت توابع مشابه در آنها چگونه است. سوالات رو از سمت سرور شروع میکنم. فرض لازم است سمت سرور 3 سوکت سروری داشته باشیم. SOCKET AcceptSock1; SOCKET AcceptSock2; SOCKET AcceptSock3; حال باید دستورات زیر اجرا شود int InitFunction(SOCKET &AcceptSock) { SOCKET AcceptSock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (AcceptSock == INVALID_SOCKET) { printf("Function socket failed with error : %u\n", WSAGetLastError()); return 0; } int iTimeout = 500; BOOL option = TRUE; int iResult = setsockopt(AcceptSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iTimeout, sizeof(iTimeout)); if (iResult == SOCKET_ERROR) { printf("Function setsockopt failed with error: %u\n", WSAGetLastError()); return 0; } SOCKADDR_IN client_sin; SOCKADDR_IN local_sin; int iAddrSize = sizeof(client_sin); int iPort = 12345; // select the local interface, and bind to it local_sin.sin_addr.s_addr = htonl(INADDR_ANY); local_sin.sin_family = AF_INET; local_sin.sin_port = htons(iPort); if (bind(AcceptSock, (struct sockaddr *)&local_sin, sizeof(local_sin)) == SOCKET_ERROR) { printf("Function bind failed with error: %u\n", WSAGetLastError()); return 0; } if (listen(AcceptSock, 32) == SOCKET_ERROR) { printf("Function listen failed with error: %u\n", WSAGetLastError()); return 0; } } فانکشن بالا باید برای AcceptSock1 و AcceptSock2 و AcceptSock3 اجرا شود. با اجرای سه کد زیر. InitFunction(AcceptSock1); InitFunction(AcceptSock2); InitFunction(AcceptSock3); سوال آیا من میتوانم هرکدام از سه دستور بالا را در Thread های مختلف اجرا کنم ویا باید حتما در Thread main اجرا شود. برای پذیرش کلاینتهایی که درخواست اتصال دارند از تابع زیر استفاده میکنیم int ProcessFunction(SOCKET &AcceptSock) { fd_set fd; timeval tv; SOCKADDR_IN client_sin; int iAddrSize = sizeof(client_sin); while (true) { tv.tv_sec = 3; tv.tv_usec = 0; FD_ZERO(&fd); FD_SET(AcceptSock, &fd); int iResult = select(0, &fd, NULL, NULL, &tv); if (iResult == SOCKET_ERROR) { printf("Function select failed with error: %u\n", WSAGetLastError()); closesocket(AcceptSock); return 0; } if (iResult == 0) { continue; } SOCKET soc = accept(AcceptSock, (struct sockaddr *) &client_sin, &iAddrSize); if (soc == INVALID_SOCKET) { printf("Function accept failed with error: %u\n", WSAGetLastError()); continue; } //... Do } } که باید برای AcceptSock1 و AcceptSock2 و AcceptSock3 اجرا شود. با اجرای سه کد زیر. ProcessFunction(AcceptSock1); ProcessFunction(AcceptSock2); ProcessFunction(AcceptSock3); سوال سوال آیا من میتوانم هرکدام از سه دستور بالا را در Thread های مختلف اجرا کنم کلا لازم نیست هیچ گونه عملیات لاکی صورت گیرد. آیا من میتواند از AcceptSock1 در دو Thread مختلف استفاده کنم (پاسخ خیر است فقط میخواستم جواب در اینجا باشد). اگر استفاده کنم چه اتفاقی پیش میآید. فانکشن ()WSAGetLastError قطعا Threadsafe نیست ولی آیا توابع دیگری که کد خطا را بروز میکنند Threadsafe نیستند. برای خواندن و نوشتن اطلاعات از Socket پذیرش شده از توابع زیر استفاده می کنیم int SendMessageFunction (SOCKET sock, const char * msg, int len) { fd_set fd; timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fd); FD_SET(sock, &fd); int iResult = select(0, NULL, &fd, NULL, &tv); if (iResult == SOCKET_ERROR) { printf("Function SendMessage failed with error: %u\n", WSAGetLastError()); return -1; } int rc = send(sock, (char *)msg, len, 0); if (rc != len) { return -1; } return 1; } int ReceiveMessageFunction(SOCKET sock, char * msg, int &len) { fd_set fd; timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fd); FD_SET(sock, &fd); int i = select(0, &fd, NULL, NULL, &tv); if (i == SOCKET_ERROR) { printf("Function ReceiveMessage failed with error: %u\n", WSAGetLastError()); return -1; } else if (i == 0) { // no data on socket return 0; } // //... //len = ... //... int rc = recv(sock, (char *)msg, len, 0); // ... return 1; } آیا من میتوانم تاوابع بالا را در Threadهای مختلف استفاده کنم و یا خیر. آیا امکان خواندن از یک سوکت توسط دو Thread مختلف امکان پذیر است. نوشتن چطور آیا میتوان یک Thread از Socket بخواند و Thread دیگری در آن بنویسد. با توجه به این موضوع که در یکی از صفحات اینترنتی بیان شده بود که Boost برخلاف کتابخانه های دیگر Threadsafe است (اگرچه امروز هرچه گشتم دوباره آنرا پیدا نکردم) پاسخ با توجه به پلتفورم )Windows, Linux, ..) و کتابخانه مورد استفاده (پیشفرض کمپایلر - ACE - Poco - Boost Qt - ...) در نظر گرفته شود. متشکرم
  2. ادامه آموزش توابع کاربردی برای برنامه نویسی سوکت... تابع bind : int bind( SOCKET s, const struct sockaddr FAR *name, int namelen ); این تابع وظیفه پیوند دادن اطلاعات ارتباطی (مانند آدرس) را به سوکت تعریف شده دارد ودر برنامه سرور به کار می رود. آرگومان های این تابع به ترتیب زیر خواهد بود... آرگومان اول که متغیر نوع سوکت تعریف شده در برنامه است که با مقدار برگشتی تابع socket مقدار دهی شده است. آرگومان دوم آدرس محلی از حافظه است که متغیر ساختمان sockaddr_in در آنجا تعریف شده است (شرح این ساختمان در ادامه درج شده است.) آرگومان سوم هم اندازه متغیر ساختمان sockaddr_in است که می توانید با عملگر sizeof اندازه آن را بدست آورید. این تابع در صورت موفقیت مقدار صفر را بر می گرداند و در صورت عدم موفقیت SOCKET_ERROR را بر می گرداند. ساختمان داده ای sockAddr_in یک structure تعریف شده در هدر winsock.h است که محل نگه داری شماره پورت ارتباط و همچنین آدرس IP و دیگر اطلاعات است. struct sockaddr_in{ short sin_family, unsigned short sin_port, struct in_addr sin_addr, char sin_zero[8] }; عضوی به نام sin_family برای نگه داری نوع آدرس ارتباطی است که برای کاربرد های اینترنتی برابر ثابت AF_INET است. عضو sin_port مشخص کننده شماره پورت ارتباطی است. تابع تبدیل کننده htons(int portNumer) برای تبدیل عدد به نوع قابل فهم (BE1 to LE2) توسط ساختمان از تابع فوق استفاده می شود. و عضو sin_addr که خود یک ساختمان می باشد برای نگه داری آدرس IP که به صورت یک رشته کاراکتر مشخص می شود می باشد تابع تبدیل کننده inet_addr(char *ipaddress) برای تبدیل رشته کاراکتری که معرف آدرس IP است به نوع قابل فهم برای ساختمان داده از تابع فوق استفاده می کنیم. مثال کاربردی : sockaddr_in recSinIP; recSinIP.sin_family = AF_INET ;//set address family recSinIP.sin_port = htons(1362);//set port number recSinIP.sin_addr.S_un.s_addr = inet_addr("192.168.0.1"); نکته فنی : توجه داشته باشید که طبق تعاریف شبکه مقدار حداکثری تعریف پورت می تواند 65555 می باشد. که از این مقدار 1024 پورت اول توسط لایه های شبکه رزرو شده اند بنابراین شما نمی توانید از آنها استفاده نمایید. مانند پورت 80 که مختص به پروتکل HTTP می باشد. تابع listen : int listen( SOCKET s, int backlog ); تابع listen وظیفه گوش دادن به خط را در برنامه سرور به عهده دارد توجه داشته باشید که این تابع فقط در برنامه سرور کاربرد دارد. شرح آرگومان ها: آرگومان اول S که متغیر سوکت تعریف شده در برنامه می باشد. آرگومان دوم backlog هم تعداد صف های درخواستی است که به سیستم در یک زمان درخواست ارتباط داده اند و سیستم می تواند آنها را به حالت معلق نگه دارد این آرگومان می تواند برابر ثابت SOMAXCONN باشد. این تابع در صورت موفقیت صفر و درصورت بروز خطا ثابتی برابر با SOCKET_ERROR را برمی گرداند. تابع accept : SOCKET accept( SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen ); این تابع برای قبول درخواست اتصال بعد از تابع listen استفاده می شود. آرگومان های این تابع مانند تابع bind می باشد با این تفاوت که در آرگومان addr مشخصات ماشین متصل شده به سرور قرار می گیرد. آرگومان addrlen اندازه ساختمانی که این اطلاعات را نگهداری می کنند را مشخص می کند. این تابع در صورت موفقیت مقدار برگشتیش توصیفات مربوط به سوکت ماشین راه دور مورد نظر ماست و در صورت بروز خطا ثابتی به نام INVALID_SOCKET را بر می گرداند. تابع connect : int connect( SOCKET s, const struct sockaddr FAR *name, int namelen ); تابع connect وظیفه برقراری ارتباط را با برنامه سرور بر عهده دارد و آرگومان های آن به شرح زیر می باشد: آرگومان اول s که از نوع سوکت می باشد وهمان مقدار برگشتی تابع socket می باشد. آرگومان دوم هم که از نوع sockAddr_in می باشد. و آرگومان آخر تابع connect یعنی namelen اندازه ساختمان داده sockaddr_in است که می توان به جا مقدار آن نوشت : sizeof(sockaddr_in) این تابع در صورت موفقیت مقدار صفر و در صورت بروز خطا ثابتی برابر با SOCKET_ERROR را بر می گرداند. نکته فنی : همانطور که میدانید در کامپیوتر های امروزی کلمات در حافظه به صورت (LE(Little Endian ذخیره می شوند، یعنی بایت کم ارزش تر در خانه با شماره کوچکتر ذخیره می شود و بایت با ارزشتر در خانه با شماره بزرگتر ذخیره می شود. مثلا برای عدد هگز 3578H بایت کم ارزشتر برابر 78 وبایت پرارزشتر برابر عدد 35 است وترتیب قرار گرفتن آنها در حافظه به صورت زیر می باشد: خانه 89:35 خانه 89:34 خانه 89:33 خانه 89:32 همانطور که مشاهده میکنید بایت کم ارزشتر در آدرس 89:33 ذخیره شده و بایت با ارزشتر در خانه 89:34 ذخیره شده است کامپیوترهای معمول بدین صورت کلمات را در حافظه ذخیره میکنند اما در پشته TCP/IP به صورت عکس عمل می شوند یعنی از نوع (BE(Big Endian پشتیبانی می شود به بیان دقیق تر باید ترتیب بایت ها در حافظه درست باشد یعنی بایت با ارزشتر در آدرس کوچکتر و بایت کم ارزشتر در آدرس بزرگترذخیره شود مثلا برای عدد 3578H مانند شکل زیر عمل می شود: خانه 89:32 خانه 89:33 خانه 89:34 خانه 89:35 البته باید توجه داشته باشید که فقط ما باید ورودی های هدر TCP/IP را به نوع (BE(Big Endian تبدیل کنیم یعنی آدرس IP و شماره پورت وکلا اطلاعاتی که تحت شبکه ارسال می شوند. دیگر ثوابت به طور خودکار در تمامی کامپیوترها به صورت صحیح قرار دارند و دیگری نیازی به تنظیم ما ندارند. //برمی گرداند BE این تابع آرگومان خود را که یک عدد دوبایتی است به حالت u_short htons( u_short hostshort ); //برمی گرداند BE این تابع آرگومان خود را که یک عدد چهار بایتی است را به حالت u_long htonl( u_long hostlong ); //برمی گرداند LE این تابع آرگومان خود را که یک عدد دوبایتی است به حالت u_short ntohs( u_short netshort ); //برمی گرداند LE این تابع آرگومان خود را که یک عدد چهار بایتی است را به حالت u_long ntohl( u_long netlong ); //که معرف آدرس آی پی است را دریافت میکند ویک عدد چهار بایتی (a.b.c.d)این تابع یک رشته کاراکتر //بر می گرداند در صورتی که آدرس آی پی نامعتبر باشد یا تابع عملیات خود را با موقیت انجام BE از نوع //توسط تابع برگردانده می شود INADDR_NONE ندهد ثابت unsigned long int inet_addr( const char FAR *cp ) همچنان ادامه خواهد داشت...
  3. با سلام هدف من از تهیه این آموزش شناخت کلی درباره (Socket Programming) که بسیار وسیع هست، والبته برای خیلی از برنامه نویسها هم همیشه جذاب بوده که بتوانند برنامه های تحت شبکه بنویسند بوده است. و از آنجاییکه با فراگیری برنامه نویسی سوکت در زبان C قادر خواهید بود، برنامه هایی در زمینه های بسیار تخصصی مانند (Intrusion Detect system) سیستم های تست نفوذ، ابزارهای (sniff) تحت نظرقرار دادن پکت ها، تا برنامه های ساده ای مانند چت و نمایش فیلم های آنلاین و خرید های مجازی و ... را انجام دهید. البته ما دراین آموزش سعی بر آن خواهیم داشت که بیشتر به نکات کاربردی درباره سوکت، که اغلب خود من از آنها در پروژه هایم استفاده کرده ام اشاره داشته باشیم. سوکت (Socket) چیست؟ با یک بیان ساده می توان گفت که سوکت به ترتیب یک آدرس ماشین IP ویک شماره درگاه Port گفته می شود. در برقراری ارتباط بین کامپیوترها در یک شبکه دوچیز بسیار مهم است. 1- آدرس ماشینی که می خواهیم اطلاعاتی از آن بگیریم ویا به آن ارسال کنیم. 2- برنامه ای از آن ماشین که در خواست اطلاعات کرده یا اینکه می خواهیم اطلاعاتی از آن برنامه کسب کنیم این دو یعنی آدرس ماشین وشماره برنامه به وسیله سوکت در شبکه مشخص می شوند. WinSock چیست؟ Winsock یا Windows Socket یک رویه (Interface) برنامه نویسی است که در غالب یک DLL در سیستم عامل ویندوز برای برنامه نویسی شبکه و ساخت برنامه هایی که بتوانند با شبکه محاوره داشته باشند معرفی شده است. ارتباط مابین دوکامپیوتر می تواند به یکی از دوصورت زیر باشد: - اتصال گرا (Connection Oriented) - غیر اتصال گرا (Connection Less) در سیستم اتصال گرا ابتدا درخواست اتصال ارسال شده و درصورت موافقت طرف مقابل ارتباط برقرار می شود.به این تکنیک Data Stream نیز گفته می شود. اما در سیستم غیر اتصال گرا بدون نیاز به موافقت طرف مقابل بسته ها ارسال می شوند به این تکنیک Data Gram نیز می گویند. TCP/UDP : در پشته پروتکلی TCP/IP دونوع ارتباط می توان با کامپیوتر دور ایجاد کرد: - اتصال به کامپیوتر راه دور به وسیله سوکت Data Stream. - اتصال به کامپیوتر راه دور به وسیله سوکت Data Gram. به طورخلاصه به نوع ارتباط اول (اتصال گرا) ارتباط از نوع TCP گفته می شود. واگر نوع برقراری ارتباط به حالت (غیر اتصال گرا ) باشد به آن UDP گفته می شود. دوستان بهتره هست قبلا حتما مدل مرجع OSI برای شناخت بهتر لایه های شبکه را مطالعه نمایید. به علت مباحث تکنیکی و کمی هم پیچیده مدل OSI ما در این آموزش وارد جزئیات نخواهیم شد. تحقیق درباره آن را به خودتون واگذار میکنم. معرفی توابع مهم مورد استفاده در برنامه نویسی TCPIP با زبان C کتابخانه کار با سوکت های در زبان C می تواند از سیستم عاملی به سیستم عاملی دیگر متفاوت باشد. همینطور از سخت افزاری به سخت افزاری دیگر به عنوان مثال برای برنامه نویسی شبکه در سیستم عامل ویندوز ما از هدر فایل winsock2.h استفاده می کنیم که خود نگارشهای مختلفی دارد وبرای برنامه نویسی شبکه در سیستم عامل های خانواده NIX* از هدر فایل sys/socket.h , sys/type.h و هدرهای دیگر استفاده می کنیم که البته می توان با اقدامی هوشمندانه توسط راهنمای کامپایلر نوع سیستم عامل را تشخیص داد وبعد هدر های مربوط به هر سیستم عامل را مورد استفاده قرارداد. البته باید عرض کنم که توابع مورد استفاده در همه انواع هدرها یکسان می باشند، مگر در معدود مواردی که هر کجا احساس نیاز شود ذکر خواهند شد. شرح توابع مهم موجود در هدر فایل winsock2.h int WSAStartup( WORD wVersionRequested , LPWSADATA lpWSAData ); این تابع برای آماده سازی و بار گذاری اولیه سیستم عامل برای اجرای برنامه تحت شبکه می باشد. آرگومان های آن عبارتند از : wVersionRequested شماره نگارش هدر winsock.h است که برای تبدیل این شماره به نوع WORD می توان از ماکرو makeword استفاده کرد. نکته فنی : به هر 4 بیت یک NIBBLE گفته می شود. وبه هر 8 بیت یک BYTE گفته می شود. وبه هر 16 بیت یا دو بایت یک WORD گفته می شود. به عنوان مثال : WORD wVersionRequested=makeword(2,0); winsock1.1.h و برای نگارش WORD wVersionRequested=makeword(2,1); و آرگومان دوم یک متغیر از نوع ساختمان داده ای WSADATA می باشد که در هدر winsock تعریف شده است. اعضای این ساختمان و نحوه تعریف آن به این صورت است: typedef struct WSAData{ WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR* lpVendorInfo; } WSADATA , *LPWSADATA; مثال کاربرد : WSADATA wsaData; WORD wVersionRequested=makeword(2,0); WSAStatrtup(wVersionRequested,wsaData); این تابع در صورت موفقیت مقدار صفر را بر می گرداند و در صورت شکست کد خطای رخ داده را بر می گرداند. int WSACleanup(void); از این تابع برای اتمام بارگذاری مربوط به شکست سیستم عامل استفاده می شود. این تابع در صورت موفقیت مقدار صفر و در صورت بروز خطا ثابتی برابر با SOCKET_ERROR را برمی گرداند. تابع socket : SOCKET socket( int af, int type, int protocol ); از تابع فوق برای تعریف وایجاد یک پورت استفاده می کنیم .و مقدار برگشتی آن توصیف کننده پورت مورد نظر است آرگومانهای تابع به ترتیب از این قرار هستند: af - مشخص کننده نوع آدرس است که برای کاربری اینترنت برابر ثابت AF_INET است برای کنترل سوکت ها در یونیکس برابر ثابت AF_UNIX است و مقادیر دیگر... type - مشخص کننده نوع ارتباطها می باشد که برای ارتباط TCP ثابت SOCK_STREAM و برای یک ارتباط UDP برابر SOCK_DGRAM است. protocol - هم نماینگر نوع پروتکل انتخابی ماست برای یک ارتباط TCP برابر با ثابت IPPROTO_TCP یا مقدار عددی 0 وبرای UDP مقدار عددی 1 یا ثابت IPPROTO_UDP می باشد. این تابع در صورت موفقیت مقدار برگشتی اش توصیفات مربوط به سوکت مورد نظر ماست و در صورت بروز خطا ثابتی به نام INVALID_SOCKET را بر می گرداند. ادامه دارد...
×