View Full Version : کار با کلاسهای csocket va casyncsocket
setaare
شنبه 21 دی 1387, 18:14 عصر
سلام من میخوام یه برنامه با vc++ بنویسم که یه echo server رو با کلاسهای csocket و casyncsocket پیاده سازی کنه. echoserver برنامه ای هست که سمت کلاینت هر چیزی به سرور بفرسته ، سرور همون عبارت رو به کلاینت میفرسته. یه sample هم دارم اما ازش چیزی نفهمیدم. کسی هست که بتونه کمک کنه؟ یا کار با این کلاسها رو یاد بده.
اگه کمک کنید ممنون میشم.
Nima_NF
شنبه 21 دی 1387, 20:24 عصر
socket مبحث وسیعی هست، با توجه به اینکه سوال شما بسیار کلی هست اگر کتاب برای این کار ندارید، حتما از MSDN استفاده کنید که مرحله به مرحله و یا با مثال همه چیز به خوبی توضیح داده شده است.
در لینک زیر نمای کلی از کارهایی که باید در client و server تعریف شوند مرحله به مرحله بیان شده است که حتما مطالعه کنید (از ساخت CSocket تا accept و connect و انتقال داده ها):
Sequence of Operations for a Stream Socket Communication (http://msdn.microsoft.com/en-us/library/hz0wky60.aspx)
مراحل انجام ایجاد ارتباط:
To set up communication between a server socket and a client socket (http://msdn.microsoft.com/en-us/library/ya4826hx.aspx)
نحوه ساخت CAsyncSocket
Creating and Using a CAsyncSocket Object (http://msdn.microsoft.com/en-us/library/t7a47kk4.aspx)
CAsyncSocket* pSocket = new CAsyncSocket;
int nPort = 27;
pSocket->Create( nPort, SOCK_DGRAM );
در مثال فوق یک ارتباط UDP برقرار می شود (SOCK_DGRAM) و با SOCK_STREAM ارتباط TCP
CAsyncSocket نیازمند آشنایی با مباحث شبکه، پورت ها و ... هست.
سپس از متد connect برای client و accept برای server استفاده می شود:
CSocket sockClient;
sockClient.Create( );
sockClient.Connect("barnamenevis.org", nPort);
setaare
یک شنبه 22 دی 1387, 09:20 صبح
از کمکتون ممنونم.
من این برنامه رو دارم که فقط برنامه سمت سرور هست. ببینیدش.
http://www.codeproject.com/KB/IP/MFCSockets/MFCSockets_src.zip
من دقیقا این برنامه رو نمی فهمم اگه ممکنه میشه یه توضیح بدین که این برنامه داره چه کار میکنه؟
setaare
یک شنبه 22 دی 1387, 09:24 صبح
به سرور این برنامه باید تلنت کنید و با پورتی که تو فرم برنامه مشخص می کنید باید وصل شید یعنی اول ابتدا برنامه رو اجرا کنید و بعد برید تو command prompt این دستور رو بزنید telnet 127.0.0.1 2000 به جای 2000 شماره پورتی که تو برنامه مشخص میکنید رو وارد کنید. یه سوال چرا این برنامه متد main نداره؟ و چرا متدهایی مثله send و recieve و ... رو مستقیما استفاده نکرده و تو یه هدر دیگه دوباره نوشته؟
Nima_NF
یک شنبه 22 دی 1387, 16:02 عصر
یه سوال چرا این برنامه متد main نداره؟ این برنامه با MFC و ++C نوشته شده، خاصیت این Framework به همین شکل هست، و اکثر موارد به صورت ماکروهایی پیاده سازی شده است که از دید برنامه ها پنهان است.
اگر MFC نمی دانید درک برنامه مشکل هست و تقریبا غیر ممکن!
پس در این صورت به دنبال برنامه نویسی win32 API در کنسول برای socket باشید (نه csocket)
در برنامه های MFC برای گرفتن پیام ها و استفاده از متدها یک نسخه از کلاس مورد نظر به ارث می بریم (از طریق class wizard) سپس می توانید از توابع Notification را overload کنیم که پیام ها هستند.
مثلا OnReceive که متد اتومات هست، هرگاه اطلاعاتی برای دریافت داشته باشید خودکار این پیام به پنجره شما ارسال می شود و داخل آن می توانید از Receive برای دریافت آن استفاده کنید.
setaare
جمعه 04 بهمن 1387, 11:52 صبح
سلام. من تقریبا برنامه رو نوشتم ولی خطاهایی که دریافت میکنم مربوط به هدر فایل هاست.
مثلا این خطا:
error C3641: 'DrawState' : invalid calling convention '__stdcall ' for function compiled with /clr:pure or /clr:safe
میشه بگید برای کار با این کلاسها باید چه هدرهایی رو باید include کنم؟؟؟
ضمنا من از Use MFC in a Shared DLL استفاده می کنم.
setaare
جمعه 04 بهمن 1387, 12:21 عصر
مشکلی که بالا گفتم حل شد ولی یه خطای دیگه ایجاد شده:»
من تو Properties ،
Common Language Runtime Support
رو Common Language Runtime Support (/clr) قراردادم. دیگه خطای بالا رو دریافت نمیکنم ولی این خطا رو میده:
error C2065: 'CSocket' : undeclared identifier
مثل اینکه اصلا این کلاسها رو نمیشناسه. چه فایلی رو باید include کنم؟
Nima_NF
یک شنبه 06 بهمن 1387, 11:18 صبح
همیشه برای اینکه پیدا کنید هر کلاسی در چه هدری قرار دارد در MSDN تابع را چک کنید که در پایان هر صفحه آن را ذکر می کند.
برای سوکت در پایان فایل stdafx.h ، هدر زیر را اضافه کنید:
#include <afxsock.h>
ضمنا وقتی خودتان پروژه ای را از اول برای سوکت ها می سازید بعد از new project ، یک پنجره wizard ظاهر می شود که در قسمت advance می توانید socket support را تیک برنید تا خودش در هنگام ساخت پروژه این هدر های مورد نیاز را اضافه کند.
ضمنا سوییچ /clr را اضافه نکنید در این صورت پروژه شما بر اساس CLR کامپایل می شود(.NET)، بگردید و ببینید که در کجا اشتباه کرده اید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.