رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

kambiz behnia

کاربـــر رسمی
  • تعداد ارسال ها

    24
  • تاریخ عضویت

  • روز های برد

    1

آخرین بار برد kambiz behnia در 12 تیر

kambiz behnia یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

2 خوب

درباره kambiz behnia

توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
طراحان
  • تاریخ تولد تعیین نشده
  1. kambiz behnia

    گفتم سیستم عامل نداره. چون یک مداربوده که خودشون طراحی کردن برای کنترل دستگاه و برای گرفتن فرمان و اطلاعات به سرور متصل میشوند. تا جایی که اطلاع دارم توش از میکرو کنترل استفاده میشه در باره طراحیش چیزی نگفتن و فعلا فقط همین برد با مستندات ناقص در دسترس هست. روی سیستم Wireshark نصب کردن و گفتن بعد از پاسخ فرمان FIN خودش دیگر فرمان FIN را ارسال نمیکند و این موجب میشود تا در طرف سرور برای متوجه شدن پایان کار از تایم اوت استفاده کند. طرف کلاینت که هیچ کنترلی نداریم ولی سیستم عامل سرور ویندوز هست و از فرمانهای کنترلی آن استفاده کردم و چون در انتها باز هم مجبور به استفاده از تایم اوت میشود این امر موجب وقفه در کار کل سیستم میشود. خواستم پیشنهاد بدم به همکاران تا مداری طراحی کنند تا بین کلاینها و سرور قرار بگیره و به شکلی این مشکل را حل کنند امیدوارم کارساز باشد
  2. kambiz behnia

    FIN_WAIT_2 یکی از stateهای سوکتهای TCPIP است. متشکرم
  3. kambiz behnia

    با تشکر از پاسخ شما برنامه طرف کلاینت بر روی سیستمی اجرا میشود که دارای سیستم عامل نیست همانطور که در دیاگرام دیده میشود وقتی سوکت مبدا در خواست بستن سوکت را درخواست کرد بعد از چند مرحله در حالت FIN_WAIT_2 باقی میماند و منتظر فرمان FIN از طرف مقابل میشود که این فرمان هیچوقت از طرف کلاینتها ارسال نمیشوند لذا آنقدر منتظر باقی میمانند تا توسط سیستم عامل پورت اشغال شده آزاد گردد بدین شکا یک پورت برای مدت اشغال باقی میماند در صورتی که نیازی به آن نیست. البته درست میفرمائید از طرف کلاینت پروسه بستن سوکت بدرستی اجرا نمی شود و این نکته که بستن سوکت را تا نیمه ادامه میدهد بخاطر اصرار زیاد بود که متاسفانه آنرا تا آخر ادامه ندادند و نیمه کاره رها میکند "کد طرف کلاینت در دسترس (طبق معمول) نیست و امکان اصلاح آن وجود ندارد". به دنبال راه حلی بودم تا وقتی یک طرف در حالت FIN_WAIT_2 قرار گرفت منتظر تایم اوت نمانده و سریعتر سوکت گرفته شده آزاد گردد. بیشتر منظورم از زیاد این بود که اتصالات مرتبا وصل و پس از اتمام کار اتصال قطع خواهد شد. و گاهی اوقات تعداد درخواست اتصال از تعداد اتصالهایی که سیستم عامل میتواند اختصاص دهد بیشتر شده و کانکشن جدیدی قبول نمیکند. لذا بابد تا جایی که امکان دارد سوکتهایی که کارشان تمام شده هرچه سریعتر آزاد شده و برای اتصالات دیگر قابل اختصاص باشند. تا آنجا که توانسته ام و جستجو کردم همگی تنظیم تایم اوت FIN_WAIT_2 را بع عنوان راه حل ارائه داده بودند به دنبال این بودم دوستانی که با این مشکل برخورد کرده اند غیر از این مورد راه حلی دیگری هم پیدا کرده اند.
  4. kambiz behnia

    با سلام جهت ارتباط بین دو سیستم از Socket TCP استفاده میکنیم. متاسفانه در طرف کلاینتها سوکتها به درستی بسته نمیشوند (مراحل بستن تا آخر ادامه پیدا نمیکنند) و این امر موجب میشود تا تعداد زیادی از سوکتها در طرف سرور در حالت FIN-WAIT-2 باقی بمانند. جهت رفع این مشکل چه راه حلی پیشنهاد میکنید. این نکته را هم اضافه کنم 1- تعدا کلاینهایی که به سرور وصل میشوند و یا وصل شده اند زیاد است. 2- بطور نرمال کلاینتها بعد از اتمام کار ارتباط خود را قطع میکنند به عبارتی اتصال دائم برقرار نیست 2- بعد قبول درخواست اتصال هر کلاینت برای هندل هریک از یک Thread مستقل استفاده میشود 3- در خواست بستن سوکت در Threadی که مسئول سرویس دهی به آن سوکت است انجام میشود. در ادامه سوال، آیا برای قبول درخواست اتصال، خواندن، نوشتن و بستن سوکتها نیاز به استفاده از mutex هست (به عبارتی آیا منبع مشترکی را مورد استفاده قرار میدهند) من فعلا از برنامه در محیط Windows استفاده میکنم در صورتی که پاسخ وابسته به نوع سیستم عامل است لطفا مشخص کنید. متشکرم.
  5. kambiz behnia

    قطعا همواره یکی از موارد پرفورمنس هست. یکی از دوستان بیان کرده بود جایی اقدام به مقایسه استفاده از این دو کرده و کارآیی std::mutex را بیشتر دیده بود. که این مورد برای خودم سوال بود لذا اقدام به تست کردم و دیدم از نظرزمانی اختلاف زیادی با هم ندارند و ضمنا Windows Mutex سریعتر است.
  6. با سلام می‌خواستم دوستان نظر خود را در باره مقایسه std::mutex و Windows Mutex بیان کنند تا از تجربیات آنها استفاده کنیم.
  7. kambiz behnia

    از بابت توضیح در پاسخ اول متشکرم سعی میکنم کتابی را که معرفی کرده بودید حتما مطالعه کنم. احساس میکنم پاسخ دوم با پاسخ اول در تناقض باشد و بطور کلی استفاده به این شکل درست نباشد. خودم فکر میکنم چون مقدار بازگشتی تابع را مستقیما به دستور copy ارسال کرده ایم و احتمالا در آن از حافظه استک استفاده نشده در عمل دوچار مشکل نشده ایم ولی چنانچه اگر به صورت دیگری استفاده کنیم حتما مشکل حافظه خواهیم داشت مثلا خودم دوباره strcpy را بازنویسی کنم بطوریکه در ابتدا آن اقدام به تعریف یک آرایه 256 تای از char نمودم اگر چه در بدنه آن هیچ استفاده ای از آن نکردم ولی موجب خراب شده داده های مورد نظر من شد و تابع بهصورت درست عمل نکرد و وقتی آن حاظه را از استک نگرفت برنامه کار مورد نظر من را انجام داد. یکی از دوستان برای چنین مواردی اصطلاح جالبی داشت "برنامه به غلط درست کار میکند."
  8. در برسی کدهای برنامه ای که قبلا نوشته شده بود و ظاهرا در حال حاضر بدرستی کار می کند به صحت عمل تابع مشابه doXOR شک کردم. متن doXOR و روش استفاده شده از آن را در زیر اضافه می کنم. لازم به ذکر است فقط به روش زیر استفاده می شود. char *doXOR(char *cData1, char * cData2) { char cData[256]; // for (int i = 0; i < 256; ++i) { cData[i] =cData1[i] ^ cData2[i]; } // cData[255] = 0; return cData; } void usedoXOR() { char cData1[256]; char cData2[256]; char cData3[256]; // memset(cData1, 0, sizeof(cData1)); memset(cData2, 0, sizeof(cData2)); memset(cData3, 0, sizeof(cData3)); strcpy(cData1, "In C, the following 6 operators are bitwise operators (work at bit-level)"); strcpy(cData2, "Typical usage of a right shift operator in C can be seen from the following code."); strcpy(cData3, doXOR(cData1, cData2)); } همانطور که میبینید در doXOR در انتها آدرس cData که یک متغییر محلی است برگشت داده می شود و من انتظار دارم قبل از خارج شدن از doXOR حافظه های اختصاص داده شده آزاد گردد لذا بهد از خروج از doXOR آدرس cData معتبر نخواهد بود اگر چه همچنان حاوی اطلاعات قبلی است. نظر شما چیست. 1 - نوشتن به این شکل مشکل دارد یا نه؟ 2 - اگر مشکلی دارد آیا نحوه استفاده ما در usedoXOR از خروجی doXOR به عنوان ورودی strcpy موجب شده تا این مشکل خود را نشان ندهد؟ 3 - آیا نوع کمپایلر و سیستم عامل میتوانند در پاسخ به دو سوال بالا تاثیرگذار باشند.
  9. kambiz behnia

    با این حساب باید تمرکزم رو روی Meta Data قرار بدم اگر چه با توجه به استفاده از SP در برنامه های دیگر کارفرما به استفاده از آن و یا مواردی مشابه آن تمایل بیشتری دارد. آخه عمری با روش SP کارکردن و به آن عادت کرده اند. از وقتی که گذاشتید متشکرم. اگر در ادامه در مورد استفاده از Meta Data به مشکل و یا سوالی برخوردم مزاحم شما خواهم شد.
  10. kambiz behnia

    فرض را براین بگذاریم که یک Object داده وجود دارد (که میتواند یک کلاس از کلاسهایی باشد که خودمان ایجاد کرده ایم و یا یک آرایه از کاراکتر و یا هر دیتا تایپ داخلی ++C "فرض کنیم حتی امکان سریالایز کرده داده وجود داشته باشد") حال میخواهیم برحسب شرایط تغیراتی روی این داده انجام گیرد. در حالت نرمال در داخل کد برنامه این کار را بکمک نوشتن متد ها انجام میدهیم. واضح است که با تغییر logic هرکدام از این متد ها مجددا باید کل برنامه کمپایل گردد. حال با توجه به اینکه logic مورد استفاده از قبل مشخص نیست و تقریبا هر چند وقت یکبار تغییر میکند و حتی گاهی تصمیم براین قرار میگیرد که از ساعت 9 تا 12 ظهر یک منطق و از 12 ظهر تا 2 منطق دیگر و دوبار منطق قبلی برای logic آن تابع در نظر گرفته شود. (چیزی شبیه تصمیم گیری بعضی از مدیران ) فرض کنیم قراراست مشخص کنیم چه وسایل نقلیه ای می تواند از یک محور خاص عبور کند در حالت نرمال میگوئیم همه در شرایط خاص بعضی حال باید این بعضی را مشخص کنیم. تصمیم بر اسال شماره پلاک باشد؟ کدام شماره ها بر اسال مدل و سال ساخت باشد و یا رنگ هم در نظر گرفته شود؟ راننده هم مهم است؟ مبدا و مقصد چطور؟ آیا باید به وسیله نقلیه چیزی اضافه و یا کم شود؟ آیا باید وسیله خاصی داخل خودرو باشد باشد؟ همه این موارد میتواند موجب تصمیم گیری جهت اعلام محدودیت های ترافیکی شود. شاید عجیب بنظر برسد ولی محدودیتهای ترافیکی اعلام شده در موارد خاص تابع هیچ قانون کلی نیست و با توجه به شرایط محیط، زمانی و مکانی اعلام و اعمال میشود. یک مثال وقتی ما مثلا در Sql Server اقدام به ایجاد Stored Procedures میکنیم دیگر برنامه ها اقدام به صدا کردن این Stored Procedures خواهند کرد و این کار کد داخل ان خواهد شود حا هرگاه من اقدام به تغییر logic این Stored Procedures کنم بعد از ذخیره درصورت صدا کردن این Stored Procedures توسط هر برنامه دیگری کدهای جدید اعمال خواهند شد. آیا امکان داشتن چنین قابلیتی در کنار برنامه های ++C وجود دارد؟ (برای دیگر زبانها چطور؟)
  11. kambiz behnia

    اتفاقا منظورم همان تغییر logic تابع هست. یعنی امیدی نیست. نظرتان در باره پاسخ کاربر quark چیست؟
  12. kambiz behnia

    همانطور که جناب آقای شیری فرمودن ارائه مثال میتواند تاثیر بهتری داشته باشد. چون با توجه به توضیحات شما ذهن من رفت طرف فانکشن پونتر و استفاده از آنها.
  13. kambiz behnia

    اگر امکان این وجو داشته باشد تا کد helloWorld را تغییر داده و بدون نیاز به کمپایل مجدد برنامه اصلی بتوان از کد جدید استفاده کرد احتمالا پاسخگوی کارم خواهد بود.
  14. kambiz behnia

    احتمالا استفاده از روش پیشنهادی شما پاسخگوی من باشد. حال بنظر شما استفاده از چه زبان اسکریپتی در ++C از نظر سرعت برنامه و سهولت استفاده کارآمدتر خواهد بود
  15. kambiz behnia

    اگر درست متوجه شده باشم استفاده از متا دیتا پاسخ گوی من نخواهد بود چون لازمه استفاده ازآن این است تا در برنامه اصلی بدانیم باید دنبال چه مواردی بگردیم
×
×
  • جدید...