نمایش نتایج 1 تا 13 از 13

نام تاپیک: مشکل در نوشتن برنامه ای برای اجرا بر روی یک هاست

  1. #1

    مشکل در نوشتن برنامه ای برای اجرا بر روی یک هاست

    با سلام خدمت تمامی اساتید و دوستان .

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

    برنامه نباید هیچ واسط کاربری داشته باشه و من بلد نیستم که برنامه ای بنویسم که هیچ پنجره ای رو نشون نده .. البته میتونم فرمی رو که قراره نشون بدم رو مخفی کنم ولی این کارم رو راه نمی اندازه(این جوری دارم سر خودم کلاه می گذارم ) .......
    یا این که برنامه رو بدون کمک از MFC بنویسم که دیگه خیلی خیلی سخت میشه .......................


    بسیار تا بسیار ممنون .............

  2. #2
    کاربر تازه وارد آواتار Blaster
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    Subway
    پست
    82
    عرض تبریک برای هاستی که خریدی ، امیدوارم به پایه هم پیر شین!
    اما در جواب سوالت فکر نمی کنم بشه بدون پنجره کاری کرد . بنابراین باید یک پنجره مخفی داشته باشی !حالا برای اینکه سرت کلاه نره می تونی مستقیما از کلاسهای MFC استفاده کنی بدون اینکه از پروژه MFC استفاده کنی . برای اینکار یک کلاس از CWinApp مشتق کن. و تابع InitInstance رو سربار گزاری و DECLARE_MESSAGE_MAP و BEGIN_MESSAGE_MAP رو در جای درست اضافه کن . حالا فقط یک کلاس دیگه از کلاس CWnd مشتق کن . و توی تابع سازنده اون از تابع CreateEx برای ساختن پنجره استفاده کن .در کلاس اول توی تابع InitInstance یک نمونه از کلاس پنجره بساز البته نه به صورت Local بلکه با استفاده از new .بعد کافیه که ادرس اون رو به متغییر m_pMainWnd از کلاس CWinApp نسبت بدی .با این کار از حداقل کلاسهای MFC استفاده می کنی و همون نتیجه رو می گیری . در ضمن می تونی از یک Win32 Empty Project استفاده کنی و تنها Header ای هم که نیاز داری AfxWin.h هست.

  3. #3
    سلام عزیز جون
    از این که وقت گزاشتی ممنون ......
    من هیچ اطلاعاتی در مورد اون دو ماکرویی که گفتی ندارم فقط همین رو میدونم که برای استفاده از پیغام ها ازشون استفاده میشه .. لطغا اگه وقت داری یه توضیح نصبتا" کامل درموردشون بدی ممنون میشم ......
    و یه چیز ذیکه من توی برنامه ای از نوع Win32 از کلاس CSocket استفاده میکنم و برنامه بدون هیچ مشکلی کامپایل میشه و لی زمانی که سوکت رو با تابع Create می سازم اصلا" ساخته نمیشه و برنامه ارور میده و لی دقیقا" همین کار رو وقتی که توی یک برنامه MFC انجام میدم جواب میده و هیچ مشکلی نداره .......
    و باز هم اگه دیگهخ خیلی وقت داشتی لطفا" در مورد کلاس CWinApp هم یه نیمچه توضیحی بده

    با تشکرررررررررررررررر خیلی خیلی فراوااااااااااااااااااااا ااااااااااان .................
    ممنون .

  4. #4
    کاربر تازه وارد آواتار Blaster
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    Subway
    پست
    82
    سلام،
    DECLARE_MESSAGE_MAP در حقیقت یک آرایه تعریف می کنه. و BEGIN_MESSAGE_MAP و END_MESSAGE_MAP او آرایه رو پر می کنند. آرایه مورد نظر لیست کاملی از Message های تعریف شده و توابع نظیر اونها رو شامل میشه!
    اما CWinApp نیازهای اصلی یک برنامه رو تامین می کنه . مثل مقدار دهی برنامه و فراهم کردن یک Message loop !
    در مورد CSocket باید اول AfxSocketInit رو فراخوانی کنی که البته بهترین محل برای فراخوانی اون هم تابع CWinApp : : InitInstance هست .

  5. #5
    من میخوام یه برنامه بنویسم که روی هاستی که خریدم اجراش کنم
    اگر احتمالا" منظورت از هاست ، یک فضا برای ارائه سرویس روی وب است ، مطالبی که تا اینجا مبادله شده مطلقا" نامربوط و غیر قابل استفاده هستند ؛ اگر حدسم درسته بگو تا توضیح بدم .
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  6. #6
    سلام
    بله تا جایی هم که من متوجه شدم حدس آقای Inprise درسته. راستش من هم قاطی کردم وقتی جوابها رو خوندم. شما اگر میخواهید برنامه Web Based بنویسید با کمک VC باید یا cgi بنویسید یا ISAPI. که البته در هیچکدوم پنجره و اینجور چیزا قابل استفاده نیست.
    به دلیل سادگی برای شروع cgi رو توصیه میکنم.
    ممنون علی

  7. #7
    با سلام مجدد

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

    خیلی خیلی ممنون

  8. #8
    دوست گرامی!

    مساله پنهان کردن پنجره، راه حل مناسبی برای مشکل شما نمی باشد. زیرا که تمامی ماژولهای زیر سیستم win32 در برنامه شما load شده و بی جهت منابع سیستم را اشغال میکند. از سویچ زیر استقاده کنید:

    /subsystem:console


    در ضمن توجه داشته باشید که سویچ فوق متعلق به Linker است نه Compiler.

    نقطه ورودی را هم از WinMain به main تغییر دهید.

  9. #9
    قبل از هر چیز لازمه تاکید کنم توسعه کاربرد برای وب با C چندان قابل توصیه نیست ؛ برای وب اصولا" استفاده از محیطهای RAD و سریع ، که امکان اشکالزدائی و بستر اجرای در-دسترس بیشتری دارند معقولتره . نه اینکه برنامهء وب مبتنی بر C چیز خوبی نخواهد بود ، بر عکس ؛ اما تو موازنه هزینه و ارزش و تلاش و زمان و خروجی ، معمولا" استفاده از محیطهائی که مشخصا" برای توسعهء وب طراحی شدن نتیجهء بهتری میده . اگر اهل یونیکس/لینوکس هستی پرل و پایتون یا PHP گزینه های بهتری هستند و روی ویندوز البته دات نت ؛ جاوا هم همیشه یک گزینهء قابل توجهه .

    روی ویندوز ، با استفاده از زبانهای Native ای مثل C میشه دو جور برنامه وب نوشت : CGI و ISAPI . اولی یک برنامه ساده است که ورودی اش باید از Stdin و خروجی اش به Stdout باشه ؛ سایر موارد هیچ تفاوتی با سایر برنامه ها نداره و البته باید که از کلاسهائی که ربطی به توسعه برای وب ندارند احتراز کنی ، کلاس پنجره و داکیومنت و امثالهم برای توسعه ویندوز هستند نه وب ؛ تو یه مثال ساده میتونی ورودی رو از ورودی استاندارد بگیری ، به بانک اطلاعاتی متصل بشی ، عملیات انجام بشه ، خروجی رو بفرستی روی خروجی استاندارد ، برنامه ات رو بگذاری روی دایرکتوری مناسب وب سرور همراه با مجوز Execute و فراخوانی اش کنی ؛ و لازمه دقت کنی به ازای هر درخواست یک نسخه از برنامه ات اجرا خواهد شد که معنیش مصرف بالای منابع سیستم خواهد بود . کدهای مثال زیادی برای Win32 CGI وجود داره که میتونه برای شروع کمکت کنه .

    روش دوم استفاده از ISAPI یا Internet Server API است ، از اسم احمقانه اش که بگذریم ، خروجی ، DLL ای است که برای وب سرور ، بصورت In-Process عمل میکنه ، یعنی پس از دریافت درخواست ، وب سرور این DLL رو به فضای آدرسی خودش کپی میکنه و همیشه این DLL روی حافظه برای پاسخگوئی باقی خواهد ماند ، که این هم خوبه و هم بد ؛ به ازای هر درخواست نسخهء جدیدی از برنامه وبت اجرا نمیشه ، اما قاعدتا" هندل کرد درخواستهای همزمان و مسائل مربوط به Threading به عهدهء خودته و البته کار دشواری هم هست . بسیاری از عناصر اصلی سایت مایکروسافت بصورت برنامه های مبتنی بر ISAPI نوشته شده اند و شاید برای خیلیها جالب باشه که بخشی از تکنولوژی ASP .NET هم به شکل ماهرانه و کلاشانه ای داره از همان ISAPI های قدیمی استفاده میکنه . اگه تصمیم داری یک برنامه جدی با C‌ بنویسی به نظر میاد ISAPI نهایتا" گزینهء بهتری باشه . همزمان با انتشار VS 2003 تکنیک دیگه ای بنام ATL Server برای توسعه وب با C بصورت Native معرفی شده که این هم نوعی پوشش برای ISAPI است که کمک میکنه برنامه ها رو سریعتر و با یک روش Tag - Based بنویسی ، هر جا روی سایت مایکروسافت ، در حال عبور از اسکریپتی با این فرمت بودی : srf. که بهش گفته میشه استنسیل ، در واقع داری از یک برنامه ATL Server استفاده میکنی ؛ با استفاده از این تکنیک میشه از کلاسهای ATL هم برای توسعه بر فراز ISAPI استفاده کرد که مسیر توسعه رو کمی سریعتر میکنه .

    برای اجرای برنامه های وب Native نیاز به مجوز اجرا یا Execute داری که اغلب روی سرورهای اشتراکی ارائه نمیشن و نمیتونی بهش امیدوار باشی ؛ معمولا" اجازهء اجرای ISAPI هم بهت داده نمیشه چون همان بار اول فراخوانی وارد فضای وب سرور میشه و اگه کد بدی نوشته باشی ، سایر کاربران سرور رو نیز متاثر میکنه ، و معمولا" راه حل اینه که یک سرور اختصاصی برای این موارد در نظر گرفته بشه که هزینه و ...زیادی خواهد داشت .

    موفق باشید؛
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  10. #10
    سلام
    ضمنا ISAPI یکی از سریعترین یا شاید سریعترین روش برنامه نویسی سمت سرور است. از CGI بسیار سریعتر است چون CGI ها هر بار توسط سرور بارگذاری و اجرا میشوند ولیکن ISAPI ها با اولین فراخوانی لود شده و در دفعات بعدی فقط توایع آنها فراخوانی میشود. نیازی به مفسر یا ترجمه و غیره (مانند بعضی از زبانها و تکنولوژیهای برنامه نویسی وب) هم ندارند.
    ممنون علی

  11. #11
    ممنون از راهنمایی های کاملتون ولی قضیه من یه چیز دیگست :

    من چند وقت پیش واسه یه جایی یه برنامه نوشتم که دو قسمت داشت یکی سرور و یکی کالاینت .... برنامه سرور یه واسط کار بری داشت که مدیر به کمک اون می تونست برنامه سرور و کالاینت ها رو مدیریت کنه ...... اما حالا احتیاج دارم که این برنامه رو از روی یک هاست اجرا کنم که تمام کلاینت ها از طریق اینترنت بتونن به سرور متصل بشن و همین طور مدیر (برای مدیریت برنامه سرور)........ حالا این جاست که مشکلات شروع شده : من نمیتونم برنامه سرور رو طوری بنویسم که بدون هیچ پنجره ای باشه ....... تمام بخش هاش کار میکنه و به درستی اما همیشه یه پنجره داره ......... مشکل من اینه که نمیدونم چه جوری برنامه ای بنویسیم که پنجره نداشته باشه ....... یا بهتر بگم نمیتونم برنامه بنویسیم که منتظر پیغام ها بمونه ( چون من از ++C به ++VC نیومدم و مسطقیم از ++VC شروع کردم , خیلی مفاهیم پایه ای رو نمیدونم )چون من تمام پیغام ها رو توسط کلاس پنجره دریافت می کنم و یه مشکل دیگه هم بهش اضافه میشه ( یا شایدم رنگ دیگه ای از مشکل قبلی باشه ) بلد نیستم که برنامه رو جوری بنویسی که منتظر بمونه ........ چون قبلا" به کمک کلاس پنجره این مشکلم حل می شد .....
    و این برنام اصلا" کاری به صفحات وب و ..... نداره .

    حالا لطفا" یه کمک درست و حسابی کنید ........

    با تشکر ...............

  12. #12
    سلام
    برای اینکه بشه راهنمایی کرد باید بگید که کلاینت و سروری که نوشتید قراره چیکار کنه. در خیلی از موارد نمیشه اینگونه برنامه ها رو به معادل Web Application ش تبدیل کرد.
    شما در واقع یک کلاینت و سرور Custom نوشتید که احتمالا تحت یک پروتکل مخصوص خودتون با هم اطلاعات رد و بدل میکنند. درسته؟
    با فرض اینکه بدانیم برنامه شما به معادل Web App قابل تبدیل نباشه شما باید یک Dedicated Server بگیرید و سروری رو که نوشتید روی اوون اجرا کنید. به دلایل تجاری و امنیتی و باری که برنامه سرور شما روی سرور میزبان شما ایجاد میکنه اصولا سرویس دهنده ها همچین سرویسی رو در اختیارتون قرار نخواهند داد و باید حتما Dedicated Server داشته باشید که تازه اوون هم با پارتی بازی حاضر به اجرای برنامه شما خواهند بود. دلیلش هم واضحه چون اینکار یک ریسک امنیتی است.
    از همه اینها گذشته کار به آسانی آپلود نرم افزار سرور شما نخواهد بود و باید حتما توسط Admin سرور خریداری شده برنامه شما به صورت سرویس یا Startup روی سرور میزبان اجرا بشه. در کل باید بگم یه مقدار راه سختی رو در پیش رو دارید.
    در واقع بحث شما بیشتر در زمینه Network Programming است تا Web Programming.
    ممنون علی

  13. #13
    سلام
    از این که این همه واسه من وقت می گذارید بسیار ممنونم ...
    میدونم که راه سختی هست و لی انشاا... این مشکلات هل میشه .
    برنامه من قبلا" توی یک LAN اجرا می شد . برنامه کلاینت و سرور تحت پروتکول TCP/IP کار میکردند . کلالینت ها به سرور متصل می شدند و با مجوز میتوانستند اطلاعاتی را به سرور داده و سرور هم بسته به شرایت اطلاعات را به داخل بانک اطلاعاتی وارد می کرد و اطلاعات خاصی را به کلاینت می داد .

    ممنون .........

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •