Parsiland Forums
بازگشت   پارسی لند > برنامه نویسی > VB.net, VB, Delphi, C++, C# ,C, Pascal > C++ & C# & C

C++ & C# & C

سی و سی پلاس پلاس سی شارپ


سایت پارسی لند | Parsiland Forums




  

سوکت نویسی (برنامه نویسی شبکه)
نحوه نمایش امتیاز موضوع: 1آرا, 5.00 میانگین. امتیاز: جستجو در موضوع ابزارهای موضوع  
سوکت نویسی (برنامه نویسی شبکه) 15 آذر 1388   #1 (لینک)
GodMaster


GodMaster آواتار ها

Administrator
 
GodMaster آنلاین نیست.
نام واقعی: GodMaster
نوشته ها: 8,898
سپاس از دیگران: 7,477 بار
سپاس شده: 7,871 بار
رشته دانشگاهی: MSc in Software Engineeri
دوستان من: 51 نفر
تیم من: پرسپولیس
تاریخ تولد: Never been born
محل سکونت: NeverLand
عضو پارسی لند: آبان 1387
حالت من: ba shakhsiat
نمایش پروفایل GodMaster    نمایش آلبوم های GodMaster   اضافه کردن GodMaster به لیست دوستان شما   گروه های دسته جمعی
سوکت نویسی (برنامه نویسی شبکه) سوکت نویسی (برنامه نویسی شبکه)

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


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

مرورگر اینترنت چگونه کار می کند؟
اطلاعات یک سایت در یک کامپیوتر سرور که یک IP منحصر به فرد دارد و به شبکه اینترنت متصل هست قرار می گیرد. حال وقتی ما نام یک سایت را در مرورگر خود وارد می کنیم این نام تبدیل به آدرس IP کامپیوتر سرور می شود و مرورگر ما یک سری درخواست ها را به وسیله سوکت ها به این آدرس IP ارسال کرده و منتظر جواب می ماند.
کامپیوتر سرور درخواست های ما را دریافت کرده و آنها را پردازش می کند و با توجه به درخواست ما اطلاعات مورد نیاز را در اختیار ما قرار می دهد.
در سوکت نویسی دو واژه مهم به نام Server و Client داریم.
سرور کامپیوتری هست که یک Port را بر روی آن باز کرده و در حالت شنود قرار داده ایم و کلاینت کامپیوتری هست که یک درخواست برای این کامپیوتر ارسال می کند.
در سوکت نویسی ارتباط ها همیشه به همین شکل می باشند. یعنی یک کامپیوتر به عنوان کامپیوتر سرور منتظر شنیدن یک درخواست هست و یک کامپیوتر به عنوان کلاینت یک درخواست ارسال می کند و پاسخ درخواست خود را می گیرد.
در بحث باز کردن یک سایت از اینترنت ، کامپیوتری که اطلاعات سایت بر روی آن قرار داده شده است ، کامپیوتر سرور و کامپیوتر ما که درخواست دریافت اطلاعات سایت را دارد کلاینت هست.
چه درخواستی؟ سرور منتظر شنیدن درخواست ما هست. مرورگر درخواست خود را ارسال می کند:
GET /index.php HTTP/1.1
Host: dblog.ir
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fa,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
این متن درخواست مرورگر ما از سرور هست . مرورگر درخواست صفحه index.php را برای dblog.ir ارسال می کند.
سرور این اطلاعات را به مرورگر برمی گرداند:
HTTP/1.x 200 OK
Date: Sat, 11 Jul 2009 15:12:02 GMT
Server: Apache/2.2.3 (Win32) PHP/5.2.0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=utf-8
پاسخ آمده که درخواست شما انجام شد و بعد از آن نیز متن صفحه درخواستی ارسال می شود.
این یک سری آشنایی مختصر در مورد سوکت ها بود که برای برنامه نویسی سوکت مورد نیاز بودند. در جلسات بعدی شروع به برنامه نویسی می کنیم.



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


------------------------------------------------------------------

 
3 کاربر ازش سپاس کردند .

آخرین ارسال GodMaster
موضوع انجمن آخرین نویسنده پاسخ نمایش تاریخ آخرین نوشته
تولد نیلوفر عزیز مبارک مناسبت ها sina91 4 83 8 مرداد 1393 11:35
تولد یاسمن عزیز مبارک مناسبت ها یاس آبی 9 125 5 تير 1393 16:18
صندلي داغ با حضور آقا سینا عزيز (sina91) صندلي داغ sina91 21 295 31 خرداد 1393 20:32
اهمیت برنامه ریزی در سیستم آموزشی مديريت آموزشي GodMaster 0 72 1 خرداد 1393 17:23
برنامه ریزی آموزشی چیست؟ مديريت آموزشي GodMaster 0 57 1 خرداد 1393 17:22
بررسی ویژگی های آموزش و پرورش کارآمد مديريت آموزشي GodMaster 0 99 1 خرداد 1393 17:21
آموزش ساخت پاکت قلبی ویژه ولنتاین كاردستي GodMaster 0 243 24 بهمن 1392 04:01
طرز تهیه انواع کیک موج دار رنگی ویژه ولنتاین آموزش تهیه انواع کیک و شیرینی GodMaster 6 317 24 بهمن 1392 03:54
طرز تهیه اسنک مخلوط ولنتاین آموزش تهیه انواع کیک و شیرینی GodMaster 0 132 24 بهمن 1392 03:51
آموزش ساخت جعبه شکلات مخصوص ولنتاین كاردستي GodMaster 0 251 24 بهمن 1392 03:42

سوکت نویسی (برنامه نویسی شبکه) 15 آذر 1388   #2 (لینک)
GodMaster


GodMaster آواتار ها

Administrator
 
GodMaster آنلاین نیست.
نام واقعی: GodMaster
نوشته ها: 8,898
سپاس از دیگران: 7,477 بار
سپاس شده: 7,871 بار
رشته دانشگاهی: MSc in Software Engineeri
دوستان من: 51 نفر
تیم من: پرسپولیس
تاریخ تولد: Never been born
محل سکونت: NeverLand
عضو پارسی لند: آبان 1387
حالت من: ba shakhsiat
نمایش پروفایل GodMaster    نمایش آلبوم های GodMaster   اضافه کردن GodMaster به لیست دوستان شما   گروه های دسته جمعی
پاسخ : سوکت نویسی (برنامه نویسی شبکه) پاسخ : سوکت نویسی (برنامه نویسی شبکه)

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


شروع به برنامه نویسی سوکت می کنیم.
در این درس من با زبان ++c کار میکنم.
به طور کلی مباحث موجود در مورد سوکت ها مانند ساخت سرور و کلاینت و … در تمام زبان های برنامه نویسی شبیه به هم هستند.
به دلیل وجود اینکه در ++c ساختمان ها و DataType های زیادی وجود دارد و توضیح آن ها کاری دشوار و خارج از حوصله هست خود را درگیر آن ها نمی کنیم و برای سوکت نویسی از یک کلاس نوشته شده و آماده استفاده می کنیم که کار ما را بسیار راحت می کند.
برای استفاده از این کلاس دو فایل Socket.h و Socket.cpp را در پروژه خود وارد کرده و از همه مهمتر نیاز به فایل ws2_32.lib داریم.
فایل ها را از اینجا دانلود کنید.
و فایل سرآمد winsock2.h که برای برنامه نویسی سوکت مورد نیاز هست و در کنار کامپایلر های ویندوزی موجود هست.
برای این کار ابتدا یک پروژه جدید در ++VC ایجاد می کنیم.







در پنجره باز شده WIN32 Console Aplication را انتخاب می کنیم و در پایین پنجره یک نام برای پروژه خود می نویسیم و بر روی کلید OK کلیک می کنیم.






در پنجره ی جدید یر روی کلید Finish کلیک می کنیم تا پروژه جدید ساخته شود.
سه فایل Socket.h و socket.cpp و WS2_32.lib را درکنار فایل های پروژه کپی می کنیم.








از منوی Project گزینه ی Add Existing Item را باز می کنیم و فایل های Socket.h و socket.cpp و WS2_32.lib وارد پروژه می کنیم.








در VC++ 2008 یک فایل با نام stdafx.h در کنار پروژه موجود هست که فایل ها ی سرآمد (هدر فایلها) را باید در آن فایل وارد کنیم.
پس فایل stdafx.h را باز می کنیم و چند خط زیر را به آن اضافه می کنیم.
#include <WinSock2.h>
#include “Socket.h”
#include <iostream>
#include <string>


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


------------------------------------------------------------------

 
4 کاربر ازش سپاس کردند .
سوکت نویسی (برنامه نویسی شبکه) 15 آذر 1388   #3 (لینک)
GodMaster


GodMaster آواتار ها

Administrator
 
GodMaster آنلاین نیست.
نام واقعی: GodMaster
نوشته ها: 8,898
سپاس از دیگران: 7,477 بار
سپاس شده: 7,871 بار
رشته دانشگاهی: MSc in Software Engineeri
دوستان من: 51 نفر
تیم من: پرسپولیس
تاریخ تولد: Never been born
محل سکونت: NeverLand
عضو پارسی لند: آبان 1387
حالت من: ba shakhsiat
نمایش پروفایل GodMaster    نمایش آلبوم های GodMaster   اضافه کردن GodMaster به لیست دوستان شما   گروه های دسته جمعی
پاسخ : سوکت نویسی (برنامه نویسی شبکه) پاسخ : سوکت نویسی (برنامه نویسی شبکه)

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


ایجاد یک کلاینت:
کلاینت برنامه ای است که با یک سرور ارتباط برقرار کرده و با آن صحبت میکند.
ساخت سرور برای جلسه بعد هست. در این جلسه یک کلاینت ایجاد کرده و با سرور های موجود در اینترنت به بحث و گفت گو می نشینیم و از ان تبادل اطلاعات لذت می بریم.
برای ایجاد کلاینت باید یک 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&);
در اینجا یک شبه مرورگر طراحی می کنیم.

اطلاعات سایت ها بر روی پورت ۸۰ رد و بدل می شود. پس ما هم بر روی پورت ۸۰ چند کلمه ای برای سرور dblog.ir می نویسیم تا ببینیم چه جوابی می گیریم.
(سرور سایت من بی ادب هست. حرف عاشقانه هم نمی زند)
یک سوکت کلاینت ایجاد می کنیم.
SocketClient s(”dblog.ir”, 80);
و چند خط برایش می نویسیم و سپس جواب هایش را گوش می دهیم.
int main() { try {
SocketClient s(”dblog.ir”, 80);
s.SendLine(”GET / HTTP/1.1 \r”);
s.SendLine(”Host: dblog.ir \r”);
s.SendLine(”User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) \r”);
s.SendLine(”Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r”);
s.SendLine(”Accept-Language: fa,en-us;q=0.7,en;q=0.3\r”);
s.SendLine(”Accept-Encoding: gzip,deflate\r”);
s.SendLine(”Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r”);
s.SendLine(”Keep-Alive: 300\r”);
s.SendLine(”Connection: keep-alive\r”);
s.SendLine(”\r\n”);
while (1) {
string l = s.ReceiveLine();
if (l.empty()) break;
cout << l;
cout.flush();
}
}
catch (const char* s) {
cerr << s << endl;
}
catch (std::string s) {
cerr << s << endl;
}
catch (…) {
cerr << “unhandled exception\n”;
}
return 0;
}
برنامه را اجرا کنید و نتیجه را ببینید.




درس این جلسه هم تمام شد.
در جلسه بعد ساخت یک سرور را یاد می گیرید و می توانید یک سررور و یک کلاینت بسازید و در شبکه به گفت گو بنشینید. (یک برنامه مسنجر ساده.)
__________________
اینکه اینجا خفته در این گور سرد
بودنش را هیچ کس باور نکرد


------------------------------------------------------------------

 
3 کاربر ازش سپاس کردند .
سوکت نویسی (برنامه نویسی شبکه) 15 آذر 1388   #4 (لینک)
GodMaster


GodMaster آواتار ها

Administrator
 
GodMaster آنلاین نیست.
نام واقعی: GodMaster
نوشته ها: 8,898
سپاس از دیگران: 7,477 بار
سپاس شده: 7,871 بار
رشته دانشگاهی: MSc in Software Engineeri
دوستان من: 51 نفر
تیم من: پرسپولیس
تاریخ تولد: Never been born
محل سکونت: NeverLand
عضو پارسی لند: آبان 1387
حالت من: ba shakhsiat
نمایش پروفایل GodMaster    نمایش آلبوم های GodMaster   اضافه کردن GodMaster به لیست دوستان شما   گروه های دسته جمعی
پاسخ : سوکت نویسی (برنامه نویسی شبکه) پاسخ : سوکت نویسی (برنامه نویسی شبکه)

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


ایجاد یک سرور:
برای ایجاد یک سرور تنها کاری که باید انجام دهیم باز کردن یک Port و قرار دادن آن در حالت شنود هست.
ابتدا یک Object از کلاس موجود سوکت سرور می سازیم
SocketServer ss(1234,5);
(کار بر روی پورت ۱۲۳۴)
نکته: اگر اشتباه نکنم : تعداد پورت ها به اندازه طول عددی دو بایت غیر منفی هست. یعنی از ۰ تا ۲ به توان ۳۲ ، یعنی برای ایجاد سوکتی می توانید عددی در این بازه انتخاب کنید. ولی باید توجه داشته باشید که بعضی از این پورت ها برای کار های خاصی هستند، مثلا پورت ۲۱ برای FTP می باشد یا پورت ۸۰ که برای وب هست. پیشنهاد من این هست که برای برنامه هایی که می نویسید از پورت های بالای ۱۱۱۱ استفاده کنید. چون ۱۱۱۱ عدد زیبایی هست.
شیء سوکت ایجاد شده است. با متد Accept آن را در حالت شنود قرار می دهیم.
ss.Accept();
زمانی که این متد را فراخوانی می کنیم کار اصلی یعنی شنود انجام می شود. در واقع بعد از فراخوانی این متد هست که پورت باز می شود.

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


std::string ReceiveLine();
std::string ReceiveBytes(int size);
متد اول یک خط از سوکت می خواند و آن را در قالب string برمی گرداند.
و متد دوم به تعداد پارامتر ورودی خود از اطلاعات رسیده میخواند و بر می گرداند.
باید توجه کنید که فراخوانی این دو متد مانند فراخوانی عملگر >> برای cout است یعنی کار برنامه متوقف شده و منتظر دریافت اطلاعات می ماند.
با متد های زیر اطلاعات را در یک سوکت می نویسیم.


void SendLine (std::string);
void SendBytes(const std::string&);
اکنون برنامه خود را کامل کرده و اجرا می کنیم.


#include “stdafx.h”
using namesoace std;
int main(int argc, char* argv[])
{
SocketServer ss(1234,5);
ss.Accept();
string rl;
rl = ss.ReceiveLine();
ss.ReceiveBytes(Size)
cout << rl;
ss.SendLine(rl);
return 0;
}
برای اجرا باید از کلید F5 استفاده کنیم.
نکته : چون ما می خواهیم یک Port را در سیستم عامل در حالت شنود قرار دهیم ممکن است فایروال سیستم به ما هشدار بدهد و اجازه ی اجرا برای برنام بخواهد.
در صورتی برناه توسط فایروال بلاک شود سوکت در حالت شنود قرار نمی گیرد.
پس اگر فایروال پیغام داد گزینه ی Unblock را کلیک کنید.








اکنون اگر در cmd دستور netstat -a را اجرا کنید می بینید که سوکت ۱۲۳۴ در حالت شنود هست.




(البته خودم در این عکس چیرهای جالبی دیدم. یکسری از پورت ها در کامپیوتر من باز هستند که خدا می داند برای چه برنامه هایی هست. این روزها کامپیوتر ما با هر فلش مموری یک ویروس جدید می گیرد که همه هم بکدور درست می کنند برای ویروس نویس عزیز که میخوام … بشه.)
برنامه ما یک خط از سوکت می خواند و همان را در سوکت می نویسد.(یک خط متن می خواند و همان را بر می گرداند)
اکنون نوبت شما هست که برنامه بنویسید.
اطلاعات دریافتی را پردازش کنید و اطلاعات خاص را در سوکت بنویسید.
مثلا می توانید خواندن و نوشتن را در یک حلقه قرار دهید.
یک خط بخوانید و اگر Hello رسید شما در سوکت جواب سلام بدهید و اگر Bye در یافت شد با یک return 0 برنامه را خاتمه دهید.
__________________
اینکه اینجا خفته در این گور سرد
بودنش را هیچ کس باور نکرد


------------------------------------------------------------------

 
4 کاربر ازش سپاس کردند .
سوکت نویسی (برنامه نویسی شبکه) 15 آذر 1388   #5 (لینک)
GodMaster


GodMaster آواتار ها

Administrator
 
GodMaster آنلاین نیست.
نام واقعی: GodMaster
نوشته ها: 8,898
سپاس از دیگران: 7,477 بار
سپاس شده: 7,871 بار
رشته دانشگاهی: MSc in Software Engineeri
دوستان من: 51 نفر
تیم من: پرسپولیس
تاریخ تولد: Never been born
محل سکونت: NeverLand
عضو پارسی لند: آبان 1387
حالت من: ba shakhsiat
نمایش پروفایل GodMaster    نمایش آلبوم های GodMaster   اضافه کردن GodMaster به لیست دوستان شما   گروه های دسته جمعی
پاسخ : سوکت نویسی (برنامه نویسی شبکه) پاسخ : سوکت نویسی (برنامه نویسی شبکه)

یک پروژه ی کامل از سوکت نویسی در ++Visual C قرار میدهم. در این پروژه یک کلاینت نوشتم که اطلاعاتی را از یک فایل میخواند و به پورت ۸۰ یک آی پی (پروتکل http ) ارسال میکند و نتیجه را در فایل دیگری مینویسد.
آدرس آی پی و نام فایل ورودی و نام فایل خروجی با آرگومانهای خط فرمان گرفته میشوند .
این برنامه بر اساس پروتوکل http نوشته شده . بنابرین هر خط باید با r\n\ به پایان رسد و آخر دستورات هم با یک خط خالی مشخص میشود.
از این برنامه به راحتی میتوانید به عنوان یک مرورگر استفاده کنید و خروجی صفحات یک سایت را گرفته و پردازش کرد.


لینک دانلود پروژه
__________________
اینکه اینجا خفته در این گور سرد
بودنش را هیچ کس باور نکرد


------------------------------------------------------------------

 
3 کاربر ازش سپاس کردند .

برچسب ها
88, 9, firefox, iso, max, mozilla, php, se, set, st, text, مثال, همین, وسیله, یا, کانال, کردن, ws, xml, آموزش, آشنایی, امکان, ارسال, برنامه نویسی, برای, تبدیل, جواب, درون, درخواست, زد, سوال, شنیدن

  


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 

(نمایش همه كاربراني كه از اين موضوع بازدید نمودند: 101 نفر
124444, aah0x5c, abass329, achaemenianb, alfix, aliland, alim2155, alimolavi, alirezadelba, alirismantab, alisoltani, alpacin, amirbor, ammar136911, arezo, Ashkan_067, ashpazbashi, ashvazd, aze, DevilsToucH, dokhtarak, doman14, fanosekhial, fsa, gecs3d, gh_abdoli, GodMaster, hamzeh28, ha_sh20, herbi, Hsdhhdvhk, h_sarol_64, idxxbi, iran648, jabbar_ho, jmousavi, jojoaria, keracker, ker_boy, keyvan_n, kiana121, k_111, mad_man, mahmoodzade, marshalshari, maziar_j15, mazi_boy_naz, meafshar, MicrosoftH, MITAN, mmtshb, mnarx, mnorouzi, mohsen2536, moh_mov, mojtaba_zahe, naderdelyani, nailika, nasser_s1, niloofar86, nmkmehri, omid2007mo, one hacker, oossaa, peimanz, pourya007, qRJ, r.nosratabad, rahavardpe, rajabi124, reza2475, reza_ict, robin2002, saalmoon, saeed khobe, sajadax, sajadsaft, sh1369, shahab_8121, sharedid, shomare10mal, ss136655, stkstk, sul-mas, tahama, tina868, tina88, tint_92, tit, unesnargesi, مهدی3, vhdm, yahyak, yahyazare, yastak, yazd11, z_nahid, احسان 1367, جق جقه, روزماری, شایان25
ابزارهای موضوع جستجو در موضوع
جستجو در موضوع:

جستجوی پیشرفته
نحوه نمایش امتیاز به این موضوع
امتیاز به این موضوع:

انتخاب سریع یک انجمن


دانلود فایل,مقاله, سورس کد

Powered by vBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
All right reserved ©2009 - 2014, Parsiland.com
کپی برداری از این سایت به هر نحو ممنوع می باشد!

Yahoo bot last visit powered by MyPagerank.Net

Parsiland Search Engine Garde
شما به این موضوع امتیاز داده اید: