ورود

View Full Version : سوال: بهترین راه ارسال و دریافت پیام



alamdar_761
پنج شنبه 29 مهر 1389, 07:08 صبح
سلام
یک سوال مبتدی داشتم

راستش یک برنامه تحت شبکه با دلفی و بانک sql server نوشتم که دارای کاربری می باشد و هر کاربری می تواند با یوزر و رمز خود وارد برنامه شود
و من می خوام هر کاربری به کاربری دیگه بتونه پیام بفرسته و هر وقت پیامی رسید به کاربر دیگر اعلان کنه و پیام ها توی بانک برای هر کاربر قابل مشاهده باشه و مثلا تعداد پیام های خوانده شده و نشده را اعلام کنه

مشکل من اینه که نمی دونم باید به چه روشی این پیام را بفرستم و دریافت کنم

مثلا میشه برای ارسال یک کاربر پیام را در بانک ثبت کنه و برای دریافت هم در رویداد OnDataChange مربوط به Data Source چک کنه که پیامی داره یا نه؟
و یا باید از طریق خود شبکه و گرفتن آی پی این کار کرد؟
و کلا هر کار دیگری که بهتره؟
لطفا راهنمایی نمایید
:متفکر:
یا علی

Felony
پنج شنبه 29 مهر 1389, 07:33 صبح
به وسیه کامپوننت های TCP Server و TCP Client در Indy میتونید بین کلاینت و سرور از طریق IP و Port مورد نظر و به وسیله پروتکول TCP اطلاعات مبادله کنید ، خود این کامپوننت ها رویدادهایی برای مشخص شدن زمان دریافت پیغام و ... در اختیارتون میزارن ، در همین بخش نمونه های زیادی برای این منظور قرار داده شده .

مهران رسا
پنج شنبه 29 مهر 1389, 11:36 صبح
سلام
یک سوال مبتدی داشتم

راستش یک برنامه تحت شبکه با دلفی و بانک sql server نوشتم که دارای کاربری می باشد و هر کاربری می تواند با یوزر و رمز خود وارد برنامه شود
و من می خوام هر کاربری به کاربری دیگه بتونه پیام بفرسته و هر وقت پیامی رسید به کاربر دیگر اعلان کنه و پیام ها توی بانک برای هر کاربر قابل مشاهده باشه و مثلا تعداد پیام های خوانده شده و نشده را اعلام کنه

مشکل من اینه که نمی دونم باید به چه روشی این پیام را بفرستم و دریافت کنم

مثلا میشه برای ارسال یک کاربر پیام را در بانک ثبت کنه و برای دریافت هم در رویداد OnDataChange مربوط به Data Source چک کنه که پیامی داره یا نه؟
و یا باید از طریق خود شبکه و گرفتن آی پی این کار کرد؟
و کلا هر کار دیگری که بهتره؟
لطفا راهنمایی نمایید
:متفکر:
یا علی

باید یک سرور بنویسید که پیغام های کاربران رو دریافت کرده و برای مقصد مورد نظر ارسال کنه . اگر با مفاهیم اولیه شبکه و TCP آشنا باشید بقیه اش ساده هست . در کل شما بفرمایید در چه سطحی قرار دارید تا بنده بتونم راهنماییتون کنم .

alamdar_761
پنج شنبه 29 مهر 1389, 12:12 عصر
از اینکه جواب دادید ممنون
پس باید با indy انجام داد؟
خب اگر مثلاً کاربر دوم(دریافت کننده) فعلا off بود چی؟ آیا وقتی که on شد پیام به دستش می رسه
راستش تا حالا شبکه کار نکردم و آشنایی آن چنانی ندارم شما فکر کنید مبتدی هستم
و منتظر راهنمایی شما بزرگوار می مونم
یا علی

Felony
پنج شنبه 29 مهر 1389, 12:22 عصر
از اینکه جواب دادید ممنون
پس باید با indy انجام داد؟
خب اگر مثلاً کاربر دوم(دریافت کننده) فعلا off بود چی؟ آیا وقتی که on شد پیام به دستش می رسه
راستش تا حالا شبکه کار نکردم و آشنایی آن چنانی ندارم شما فکر کنید مبتدی هستم
و منتظر راهنمایی شما بزرگوار می مونم
یا علی

خود به خود که قرار نیست این کار انجام بشه ، برای اینکه پیغام در زمان خاموش بودن یک کلاینت باطل نشه و بعد از روشن شدنش به دستش برسه دو راه دارید :

1- در شبکتون یک سرور در نظر بگیرید که همیشه روشن باشه و پیغام ها با واسطه این سرور به کلاینت ها برسن ، وقتی کلاینتی خاموش بود یه نسخه از پیغام در سرور نگهداری بشه و بعد از روشن شدن کلاینت پیغام رو بهش ارسال کنه .

2- در همون سیستم مبداء قبل از ارسال نامه چک کنید ( به وسیله Ping کردن یا فرستادن یک پیام به کلاینت مقصد برای درخواست اعلام آمادگی ) اگر سیستم کلاینت مقصد به درخواست پاسخ داد پس روشن و آماده هست و پیغام رو براش بفرستید در غیر این صورت در یک بانک این پیغام رو نگه داری کنید و در زمان دیگری ارسال پیغام رو به کاربر یاداوری کنید یا به صورت خودکار دوباره برای ارسال تلاش کنید .

alamdar_761
پنج شنبه 29 مهر 1389, 21:04 عصر
تشکر
نمیشه برای ارسال ، یک کاربر پیام را در بانک ثبت کنه و برای دریافت هم ، در رویداد OnDataChange مربوط به Data Source چک کنه که پیامی داره یا نه؟
یا نمیشه پیام را در بانک ذخیره کرد و اگر تعداد پیام های مربوط به کاربر تغییر کرد به کاربر خبر بده
اگه نمیشه میشه همون روش دومی که گفتید را توضیح بدید ممنون میشم
و در کل چه روشی برای چنین قسمتی در برنامه ها عمومیت داره

تشکر

یا علی

Felony
پنج شنبه 29 مهر 1389, 23:26 عصر
نمیشه برای ارسال ، یک کاربر پیام را در بانک ثبت کنه و برای دریافت هم ، در رویداد OnDataChange مربوط به Data Source چک کنه که پیامی داره یا نه؟
گیر دادی به اون رویداد ها !


یا نمیشه پیام را در بانک ذخیره کرد و اگر تعداد پیام های مربوط به کاربر تغییر کرد به کاربر خبر بده
اگر تو شبکت سرور داری چرا میشه ولی وقتی سرور نداری رو کدوم بانک ؟!


اگه نمیشه میشه همون روش دومی که گفتید را توضیح بدید ممنون میشم
و در کل چه روشی برای چنین قسمتی در برنامه ها عمومیت داره
توضیح که دادم ، کجاش براتون واضح نبود ؟

بسته به شرایطی که داری یکی از روشهای ذکر شده رو انتخاب کن .

alamdar_761
جمعه 30 مهر 1389, 07:22 صبح
گیر دادی به اون رویداد ها ! .
ببخشید استاد



اگر تو شبکت سرور داری چرا میشه ولی وقتی سرور نداری رو کدوم بانک ؟!
بله بانک توی سرور نگهداری میشه
و بقیه به سرور متصل هستند
پس با وجود سرور باید از روش اول استفاده کرد
اگر امکان داره آموزشی و یا لینکی بزارید تا استفاده کنم
البته باز هم عمومیت داره ممکن یکجا سرور باشه و یکجا نباشه (چون برنامه یک جورایی عمومیه)
البته شرمنده ها

یا علی

alamdar_761
شنبه 01 آبان 1389, 16:03 عصر
یکی به داد من برسه

Felony
شنبه 01 آبان 1389, 16:49 عصر
ببخشید استاد



بله بانک توی سرور نگهداری میشه
و بقیه به سرور متصل هستند
پس با وجود سرور باید از روش اول استفاده کرد
اگر امکان داره آموزشی و یا لینکی بزارید تا استفاده کنم
البته باز هم عمومیت داره ممکن یکجا سرور باشه و یکجا نباشه (چون برنامه یک جورایی عمومیه)
البته شرمنده ها

یا علی

لینک چی ؟ آموزش چی ؟ مگه برنامه Nero که آموزش داشته باشه ؟!

روند کاری رو که براتون شرح دادم ،تمام چیزهایی هم که تو پیاده سازی بهش نیاز دارید تو همین بخش دلفی بارها در موردشون بحث شده ، خودتون شورع به نوشتن کنید و مشکلاتتون رو بپرسید .

iman_Delphi
شنبه 01 آبان 1389, 17:21 عصر
سلام بهترين كاري كه ميتوني انجام بدي اينه
شما بايد يه قسمت نرم افزارتو به صورت timer بنويسي در يك فايل exe جدا(كاربر مقصد ممكن است اصلا" داخل نرم افزار شما نباشد)
اين قسمت جديد به صورت آيكن در كنار ساعت ويندوز قرار ميگيرد و هر 50 ثانيه(مثلا") يه كوري بزنه كه آيا نامه رسيده يا نه اگه رسيده بود يه بالن باز بشه بگه شما نامه دريافت كردين-حالا چه داخل نرم افزارت باشه و چه نباشه ميفهمه كه نامه گرفته-
و همچنين اين فايل exe را داخل startup ميزاري كه بهصورت كنسول هميشه كه سيستم مياد بالا خودش اجرا بشه -البته از كاربرت يا بايد رمز ورود و يوزر بگيره يا خودت بايد از روي آيپي بفهمي اين كاربر كي هست-

alamdar_761
شنبه 01 آبان 1389, 19:48 عصر
تشکر ولی باید به برنامه وارد شه تا پیام را ببینه نمی خوام جدا از برنامه این کار را کنه

یا علی

K.Mohammadreza
یک شنبه 02 آبان 1389, 06:43 صبح
اگر تا حالا با برنامه های RSS خوان کار کرده باشید می بینید که بعد از اینکه دنبال خبر در اینترنت می گردند اونها توی یک فایل xml ذخیره می کنند که در واقع دیتا بیسشونه، و لینک اخباری که کاربر اونها را نخونده بصورت bold نشون میدن. این برنامه را من توی دلفی ساختم کافیه به جای اینکه اخبار را از سایتها دریافت کنه از روی دیتابیس اونها را بخونه فکر کنم این بهترین حالت برای برنامه مورد نظر شما باشه که البته اکثر سرویس های EMail که بصورت Local هم نصب می شوند هم همین کار را میکنند. البته اگر به دنبال FeedReader در گوگل سرچ بزنید می تونید برنامه های Open Source زیادی در این زمینه از جمله در دلفی نیز پیدا کنید.

iman_Delphi
یک شنبه 02 آبان 1389, 10:47 صبح
تشکر ولی باید به برنامه وارد شه تا پیام را ببینه نمی خوام جدا از برنامه این کار را کنه

خب ميتوني داخل تايمر يه كوري بزاري كه هي ريفرش بشه كه اين تايمر هم داخل برنامه خودت هست.

alamdar_761
یک شنبه 02 آبان 1389, 11:48 صبح
خب ميتوني داخل تايمر يه كوري بزاري كه هي ريفرش بشه كه اين تايمر هم داخل برنامه خودت هست.

می فهمی چقدر سرعت برنامه میاد پایین اونم تازه از سرور بخونه