مَوْلاىَ يا مَوْلاىَ، اَنْتَ الْخالِقُ وَاَ نَا الْمَخْلُوقُ، وَهَلْ يَرْحَمُ الْمَخْلُوقَ‏ اِلَّا الْخالِقُ ... مولاى من اى مولاى من تويى آفريدگار و منم آفريده و آيا رحم كند بر آفريده جز آفريدگار

 

 

یک پروژه کامل سوکت نویسی (کلاینت)

سلام

در ۴ پست گذشته  از بخش برنامه نویسی ++c در مورد اینکه سوکت نویسی برای چی هست و چطوری برنامه نویسی سوکت انجام بدیم توضیح داد.

امروز یک پروژه ی کامل از سوکت نویسی در ++Visual C قرار میدهم.

در این پروژه یک کلاینت نوشتم که اطلاعاتی را از یک فایل میخواند و به پورت ۸۰ یک آی پی (پروتکل http ) ارسال میکند و نتیجه را در فایل دیگری مینویسد.

آدرس آی پی و نام فایل ورودی و نام فایل خروجی با آرگومانهای خط فرمان گرفته میشوند .

این برنامه بر اساس پروتوکل http نوشته شده . بنابرین هر خط باید با r\n\ به پایان رسد و آخر دستورات هم با یک خط خالی مشخص میشود.

از این برنامه به راحتی میتوانید به عنوان یک مرورگر استفاده کنید و خروجی صفحات یک سایت را گرفته و پردازش کرد.

حوصله نوشتن توضیحات بیشتر را ندارم بنابرین اگر جایی ابهامی هست در بخش نظرات مطرح کنید تا جواب بدم.

لینک دانلود پروژه

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ۵ نظر



سوکت نویسی (برنامه نویسی شبکه) – بخش چهارم سرور

ایجاد یک سرور:
برای ایجاد یک سرور تنها کاری که باید انجام دهیم باز کردن یک Port و قرار دادن آن در حالت شنود هست.

ابتدا یک Object از کلاس موجود سوکت سرور می سازیم

SocketServer ss(1234,5);

(کار بر روی پورت ۱۲۳۴)

نکته: اگر اشتباه نکنم : تعداد پورت ها به اندازه طول عددی دو بایت غیر منفی هست. یعنی از ۰ تا ۲ به توان ۳۲ ، یعنی برای ایجاد سوکتی می توانید عددی در این بازه انتخاب کنید. ولی باید توجه داشته باشید که بعضی از این پورت ها برای کار های خاصی هستند، مثلا پورت ۲۱ برای FTP می باشد یا پورت ۸۰ که برای وب هست. پیشنهاد من این هست که برای برنامه هایی که می نویسید از پورت های بالای ۱۱۱۱ استفاده کنید. چون ۱۱۱۱ عدد زیبایی هست.

شیء سوکت ایجاد شده است. با متد Accept آن را در حالت شنود قرار می دهیم.

ss.Accept();

زمانی که این متد را فراخوانی می کنیم کار اصلی یعنی شنود انجام می شود. در واقع بعد از فراخوانی این متد هست که پورت باز می شود.

ادامه مطلب »

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ۵ نظر



سوکت نویسی (برنامه نویسی شبکه) – بخش سوم کلاینت

ایجاد یک کلاینت:
کلاینت برنامه ای است که با یک سرور ارتباط برقرار کرده و با آن صحبت میکند.
ساخت سرور برای جلسه بعد هست. در این جلسه یک کلاینت ایجاد کرده و با سرور های موجود در اینترنت به بحث و گفت گو می نشینیم و از ان تبادل اطلاعات لذت می بریم.

برای ایجاد کلاینت باید یک Object ایجاد کنیم.

SocketClient s(IP, Port);

به جای IP میتوانیم نام کامپیوتر را نیز وارد کنیم.

با متد های ReceiveLine() و ReceiveBytes(Size) می توانیم اطلاعات ارسال شده به سوکت را بخوانیم.

std::string ReceiveLine();
std::string ReceiveBytes(int size);

و با متد های زیر اطلاعات را در یک سوکت می نویسیم.

void SendLine (std::string);
void SendBytes(const std::string&);

در اینجا یک شبه مرورگر طراحی می کنیم.

ادامه مطلب »

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ۳ نظر



سوکت نویسی (برنامه نویسی شبکه) – بخش دوم

شروع به برنامه نویسی سوکت می کنیم.

در این درس من با زبان ++c کار میکنم.

به طور کلی مباحث موجود در مورد سوکت ها مانند ساخت سرور و کلاینت و … در تمام زبان های برنامه نویسی شبیه به هم هستند.

به دلیل وجود اینکه در ++c ساختمان ها و DataType های زیادی وجود دارد و توضیح آن ها کاری دشوار و خارج از حوصله هست خود را درگیر آن ها نمی کنیم و برای سوکت نویسی از یک کلاس نوشته شده و آماده استفاده می کنیم که کار ما را بسیار راحت می کند.

برای استفاده از این کلاس دو فایل Socket.h و Socket.cpp را در پروژه خود وارد کرده و از همه مهمتر نیاز به فایل ws2_32.lib داریم.

فایل ها را از اینجا دانلود کنید.

و فایل سرآمد winsock2.h که برای برنامه نویسی سوکت مورد نیاز هست و در کنار کامپایلر های ویندوزی موجود هست.

برای این کار ابتدا یک پروژه جدید در ++VC ایجاد می کنیم.

ادامه مطلب »

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ارسال نظر



سوکت نویسی (برنامه نویسی شبکه) – بخش اول

سوکت ها چه هستند؟
بهتر است به این سوال پاسخ دهیم که کامپیوتر ها درون یک شبکه چگونه با هم ارتباط برقرار می کنند؟
کامپیوتر ها در یک شبکه به وسیله سوکت ها با هم ارتباط برقرار کرده و با هم گفتگو می کنند. به عنوان مثال یک برنامه چت در یک شبکه را در نظر بگیرید یا حتی مرورگرهای وب ، این ها چگونه اطلاعات را دریافت می کنند؟

زیاد نام IP را شنیده ایم.برای یاد آوری باید گفت که هر کامپیوتری که در یک شبکه قرار می گیرد یک IP به آن تعلق می گیرد که در واقع یک نام برای شناسایی آن کامپبوتر می باشد.
دو کامپیوتر را در نظر بگیرید که با دو IP مختلف می خواهند در یک شبکه با هم ارتباط برقرار کرده و اطلاعاتی را رد و بدل کنند. این کار از طریق یک کانال ارتباطی امکان پذیر هست که به آن سوکت می گویند. بین دو کامپیوتر می توان سوکت های زیادی ایجاد کرد که همه از هم جدا می باشند و اطلاعاتی که بین دو کامپیوتر رد و بدل می شود باید در سوکت های خاص باشند.

مثال : بهترین مثالی که برای سوکت ها می توان زد مرورگر اینترنت شماست.

ادامه مطلب »

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ۵ نظر



توابع تاخیر زمانی در ++c توابع دوست داشتنی

توابع تاخیر زمانی توابعی هستند که یک وقفه در اجرای برنامه ایجاد می کنند و اجرای برنامه را به تاخیر می اندازند.

من این توابع را خیلی دوست دارم زیرا که با تاخیر زمانی کارهای زیبایی می توان انجام داد .

یک مثال ساده:

نوشته شدن متن به سبک ماشین چاپهای قدیمی.

در حالت عادی زمانی که ما برای چاپ متن از یک حلقه تکرار استفاده کنیم متن به سرعت چاپ شده به طوری که ما همه ی متن را یکجا می بینیم.

int i;

char *str = “salam \n in yek jomle braye test mibashad \n dblog.ir”;

for(i=0;str[i] != ‘\0′;i++)
cout << str[i];

چون سرعت پردازش سیستم بسیار بالا است ما متنی که به کمک حلقه بالا چاپ می شود را یکباره می بینیم اما با ایجاد یک تاخیر در حلقه این متن به شکل زیباتری چاپ می شود.

برای ایجاد تاخیر از دو تابع delay و sleep استفاده می شود.

اگر با IDE های قدیمی مثل Turbo C استفاده می کنید با وارد کردن فایل سرآمد dos.h می توانید از این توابع استفاده کنید.

دقت کنید که این دو تابع با هم تفاوت اندکی دارند.

delay();

این تابع یک عدد بر حسب میلی ثانیه می گیرد و تاخیری که ایجاد می کند بر حسب میلی ثانیه است.

مثلا delay(1000) تاخیری معادل ۱ ثانیه ایجاد میکند.

sleep();

این تابع عددی بر حسب ثانیه می گرد و تاخیری در برنامه ایجاد می کند.

اگر از IDE های جدید مانند ++VC استفاده می کنید باید از فایل سرآمد windows.h استفاده کنید.

Sleep();

این تابع در فایل سرآمد windows.h قرار دارد و مانند تابع delay عمل کرده و تاخیری بر حسب میلی ثانیه ایجاد می کند. (به حرف S بزرگ توجه کنید)

همان مثال بالا با تاخیر زمانی:

#include<dos.h>
#include<iostream.h>
void main()
{int i;

char *str = “salam \n in yek jomle braye test mibashad \n dblog.ir”;

for(i=0;str[i] != ‘\0′;i++)
{
cout << str[i];
delay(500);
}
}

از جمله کارهای دیگری که می توانید با این توابع انجام دهید دیدن نتیجه ی اجرای برنامه با سرعت کمتر و همچنین جلوگیری از بالا رفتن استفاده از CPU در زمان اجرای برنامه است. وقتی برنامه ای که نوشته اید دارای حلقه ای با محاسبات زیاد باشد درصد استفاده از CPU بالا می رود که با تاخیر زمانی می توان از آن جلوگیری کرد.

فرض کنید یک تابع بازگشتی برای محاسبه فاکتوریل یک عدد نوشته اید . با قرار دادن یک دستور چاپ و ایجاد یک تاخیر زمانی می توانید نتیجه ی بازگشتی این تابع را به آرامی مشاهده کنید.

داغ کن - کلوب دات کام | + موضوع : برنامه نویسی, سی پلاس پلاس | تاریخ | ارسال نظر