djsohrab2007
چهارشنبه 02 شهریور 1390, 02:34 صبح
با سلام خدمت تمامی دوستان ،
من دوباره مزاحم شما شدم ، من کل تاپیک هایی که در مورد winsock programming در این انجمن بود را مطالعه کردم و همچنین MSDN را ( هرچند که خوندن مطلب انگلیسی برام خیلی سخته، زبانم داغونه:گریه: ). تو google هم جست و جو کردم چیزی پیدا نکردم.
مقدمه : ما در windows sock programming برای ارسال داده ها از دستور send و برای دریافت داده ها از دستور recv که به صورت زیر تعریف شده اند استفاده می کنیم :
int send( SOCKET s, const char *buf, int len, int flags );
int recv( SOCKET s, char *buf, int len, int flags );
همانطور که مشاهده می کنید تابع send اطلاعاتی از نوع char* می فرستد و تابع recv هم اطلاعاتی از همان نوع را دریافت می کند.
سوال: چه طوری می توان اطلاعاتی را از نوع داده های دیگر ( عدد نه ها :متفکر:، منظورم یک کلاس یا یک ساختار است ) را فرستاد و دریافت کرد ؟
فکرهای من :به نظر من ما باید یک تابع send جدید تعریف کنیم که یک کلاس به عنوان ورودی بگیره و آن را به نوعی تبدیل به متن بکنه و بفرسته، از طرفی هم یک تابع recv جدید تعریف کنیم که این متن دریافتی را به نوعی دوباره تبدیل به کلاس کنه!
اگه قرار بود کد کلاس فرستاده شده از طرف تابع send ( جدید ) را فقط در خروجی چاپ کنیم که مسئله حل و بدهی بود :بامزه: ، ولی ما نمی خواهیم کد کلاس دریافتی را چاپ کنیم ، می خواهیم از این کلاس به عنوان یک کلاس جدید استفاده کنیم ( منظورم از استفاده : اینکه به عنوان ورودی برای یکی از تابع هایمان بتوانیم بفرستیم )
نکات قابل توجه :
1- منظورم از فرستادن و دریافت کلاس ، فرستادن و دریافت یک شی از کلاس است.
2- این کلاس ما به هر صورت دلخواهی می تونه تعریف شه ، و فرم خاصی در تعریف آن وجود نداره.
3- ما این برنامه را می خواهیم در یک C++ استاندارد بنویسیم ، نه C++ که گرافیکی یا همون clr. یعنی این کد را بتوان در یک empty project در VC++ کامپایل کرد.
4- در تعریف تابع send و recv جدید لازم نیست به طریقه ی ارسال و دریافت داده ها فکرم کنیم ، بلکه می توانیم از همان send و recv قبلی در این تابع های جدید استفاده کرد. می توان از یک flag برای تشخیص اینکه الان اطلاعات معمولی است ( معمولی = متن ساده ) یا غیر معمولی ( غیر معمولی = کلاس ) استفاده کنیم.
سوال تکمیلی : اگر اطلاعات ارسالی عکس ویا آهنگ بود چی ؟
با تشکر از زحمات شما ، و وقتی که گذاشتید و می خواهید بگذارید
من دوباره مزاحم شما شدم ، من کل تاپیک هایی که در مورد winsock programming در این انجمن بود را مطالعه کردم و همچنین MSDN را ( هرچند که خوندن مطلب انگلیسی برام خیلی سخته، زبانم داغونه:گریه: ). تو google هم جست و جو کردم چیزی پیدا نکردم.
مقدمه : ما در windows sock programming برای ارسال داده ها از دستور send و برای دریافت داده ها از دستور recv که به صورت زیر تعریف شده اند استفاده می کنیم :
int send( SOCKET s, const char *buf, int len, int flags );
int recv( SOCKET s, char *buf, int len, int flags );
همانطور که مشاهده می کنید تابع send اطلاعاتی از نوع char* می فرستد و تابع recv هم اطلاعاتی از همان نوع را دریافت می کند.
سوال: چه طوری می توان اطلاعاتی را از نوع داده های دیگر ( عدد نه ها :متفکر:، منظورم یک کلاس یا یک ساختار است ) را فرستاد و دریافت کرد ؟
فکرهای من :به نظر من ما باید یک تابع send جدید تعریف کنیم که یک کلاس به عنوان ورودی بگیره و آن را به نوعی تبدیل به متن بکنه و بفرسته، از طرفی هم یک تابع recv جدید تعریف کنیم که این متن دریافتی را به نوعی دوباره تبدیل به کلاس کنه!
اگه قرار بود کد کلاس فرستاده شده از طرف تابع send ( جدید ) را فقط در خروجی چاپ کنیم که مسئله حل و بدهی بود :بامزه: ، ولی ما نمی خواهیم کد کلاس دریافتی را چاپ کنیم ، می خواهیم از این کلاس به عنوان یک کلاس جدید استفاده کنیم ( منظورم از استفاده : اینکه به عنوان ورودی برای یکی از تابع هایمان بتوانیم بفرستیم )
نکات قابل توجه :
1- منظورم از فرستادن و دریافت کلاس ، فرستادن و دریافت یک شی از کلاس است.
2- این کلاس ما به هر صورت دلخواهی می تونه تعریف شه ، و فرم خاصی در تعریف آن وجود نداره.
3- ما این برنامه را می خواهیم در یک C++ استاندارد بنویسیم ، نه C++ که گرافیکی یا همون clr. یعنی این کد را بتوان در یک empty project در VC++ کامپایل کرد.
4- در تعریف تابع send و recv جدید لازم نیست به طریقه ی ارسال و دریافت داده ها فکرم کنیم ، بلکه می توانیم از همان send و recv قبلی در این تابع های جدید استفاده کرد. می توان از یک flag برای تشخیص اینکه الان اطلاعات معمولی است ( معمولی = متن ساده ) یا غیر معمولی ( غیر معمولی = کلاس ) استفاده کنیم.
سوال تکمیلی : اگر اطلاعات ارسالی عکس ویا آهنگ بود چی ؟
با تشکر از زحمات شما ، و وقتی که گذاشتید و می خواهید بگذارید