نمایش نتایج 1 تا 40 از 269

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

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار f_pakzad
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    مازندران
    پست
    185

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    توسط دستور زیر شماره پورتها را در کومبوباکس قرار میدهم

    string[] lPorts = System.IO.Ports.SerialPort.GetPortNames();

    حالا اگر بخواهیم نرم افزار خودش تشخیص بده که مودم توسط چه پورتی کانکت شده باید چه کدی را بنویسم؟

  2. #2
    کاربر دائمی آواتار faravaghi
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    پست
    233

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    سلام عزیز،
    اینکه شما می خوای خوبه ولی نه فایده ای داره نه مقرون به صرفه است!
    فایده نداره برای اینکه اولا شما برای هر نسخه که قراره به مشتری بدی نهایت طرف اول که داره نصب میکنه میگی شماره پورت رو وارد کن اونو ذخیره میکنی و هر موقع لازم داشتی ازش استفاده میکنی!
    زیاد به فکر راحتی مشتری نباش!
    مگه قراره هر بار که نرم افزار رو باز میکنه هی ازش بپرسی کدوم پورتو لازم داری؟
    یا اینکه هر بار یارو می خواد بره دستگاه مودمشو عوض کنه که هی پورت عوض کنی؟
    تو اکثر برنامه هایی که تو بازاره من دیدم میگه درایور مودمتو نصب کن بعد برو تو کنترل پنل قسمت مودم ها ببین کدوم پورت مال مودمته بعد بیا اونو تو نرم افزار وارد کن بعد باهاش کار کن!

    ModemSetting.png

    این چیزیه که من تو نرم افزارم استفاده کردم. نه کمبو باکسه نه از این چیزا!
    مقرون به صرفه نیست یعنی اینکه اگه این کارهم شدنی باشه که بعید نیست اصلا نمی ارزه که اینقدر زحمت مفت بکشی که کاربر راحت باشه!

    حالا یه کارای دیگه میشه کرد که کاربر راحت باشه، یعنی چی؟
    مثلا بیای از کدهایی استفاده کنی که هر وقت USB به سیستم وارد شد تشخیص بده و اتومات بره به مودم کانتک کنه و یا وقتی از دستگاه قطع شد برو کانکشن رو قطع کنه که کارات ردیف شه.
    اگه خواستی کدشو برات بفرستم.

    من یه پیشنهاد برای همه که این تاپیک رو دنبال میکنم هم دارم:
    این تاپیک خیلی مفیده برای کسی که از AT Command ها و مسائل مربوط به این ها اطلاعاتی داشته باشه.
    یعنی وقتی لازم باشه خودش کدها رو تغییر بده.
    دقیقا من حرف دوستمون رو که گفت:

    نقل قول نوشته شده توسط mahziar مشاهده تاپیک
    راه سریع ، آسون و بی دردسر استفاده از کامپوننت هاست ولی اگه میخوای یه نرم افزار حرفه ای بنویسی که هر تغییری که خواستی بدی (مثلا بعضی از کامپوننت ها دلیوری ندارن ، بعضی long sms نمیشه فرستاد و....)خوب بهتره از AT command ها استفاده کنی .

    البته کار با دستورات AT command همچین هم آسون نیست ، یکی از دوستان میگفت برای اینکه با دستورات AT کار کنه نزدیک ششماه دنبال فراگیری نحوه استفاده از دستورات بوده .

    تصمیم گیری با خودت !!!
    من از زمستان پارسال یعنی اواخر ماه آذر رفتم تو کار این برنامه و تا اول اردیبهشت امسال داشتم در رابطه با
    AT Command ها و PDU تحقیق میکردم و در نهایت موفق به تقریبا خلق یک DLL شدم که دارم باهاش هرکاری که بگی میکنم.
    البته بگم یه چیزی پیدا کردم بعد خودم ویرایش کردم تو همین مدت تقریبا 5 ماه. کدهاش دست خودمه اینکه میگم هر کاری که بخوای بکنی برای همینه که من می تونم تو کدها دستکاری کنم با اطلاعاتی که دارم.

    میگن اگه قرار باشه 10 روز وقت داشته باشی که یک درخت رو قطع کنی بهتره 9 روز وقت بزاری تبر تو خوب تیز کنی!!!!
    به نظر من اول برید ماهی گیری یاد بگیرین بعد بیاین ماهی بگیرین!!!!
    فرستادن پیامک چندتایی هیچ فرقی با یکی نداره فقط یکم تفاوت داره که تو PDU باهم متفاوته.

    پیشنهاد میکنم برین یه سری به این تاپیک بزنین
    PDU Encoding And Decoding

    بعد اگه کسی اینو مطالعه کرد بمن بگه من DLL که دارم بهش بدم. از این به بعد خودتون میتونین هر کاری که می خواین بکنین.

  3. #3
    کاربر دائمی آواتار faravaghi
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    پست
    233

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    سلام،
    اینم بگم بعضی ها میگن مثلا با این گوشی کار میکه اون یکی جواب نمیده .....
    این درست نیست.
    وقتی گفتم برین AT Command ها رو یاد بگیرین برای اینکه بدونین کدوم مدل مودم یا گوشی چه نوع دستوراتی را پشتیبانی میکنه چه دستوراتی رو نمی کنه!
    مثلا تو بعضی مدل ها تایید ارسال دارین تو بعضی ها ندارین! مگه میشه؟
    اگه نظر منو بخواین میگم نه نمیشه! پس چیه؟
    باید تنظیمات گوشی یا مودم رو بلد باشین! یعنی چی؟
    مثلا تو همین تایید ارسال که گفتم، اگه بخواین جواب بگیرین باید ببینین تو کدوم مودم یا گوشی چه مدلی رو پشتیبانی میکنه و این فقط از طریق زیر میتونین پیدا کنید:
    AT+CNMI=?
    +CNMI: (0,1,2,3),(0,1,2,3),(0,2),(0,1,2),(0,1)

    OK

    حالا باید بسته به نوع مودم گوشی این متغیر را تنظیم کنید که چه طوری تایید ارسال داشته باشید!
    به همین راحتی!!!!!!
    و اگه کسی وارد باشه میاد اینو اول هر اتصال میزاره و بسته به نوع و مدل پشتیبانی میاد تنظیمات رو انجام میده و اگر بجای OK از مودم یا گوشی Error گرفت یه متغیر رو ست میکنه که این حالت مثلا تایید ارسال رو پشتیبانی نمیکنه. بعد هر جا طرف خواست تایید بگیره میفهمی که این رو پشتیبانی نمی کنه و دیگه دردسر نداری!
    بعدشم،
    وقتی شما گوشی موبایل رو به عنوان GSM Modem استفاده میکنید فقط اون به عنوان یک رابط برای شما کار می کنه تا بتونید دستورات AT Command رو باهاش بفرستید به اپراتور. یعنی دقیقا گوشی نقش مودمرو بازی میکنه.

  4. #4
    کاربر دائمی آواتار f_pakzad
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    مازندران
    پست
    185

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    نقل قول نوشته شده توسط faravaghi مشاهده تاپیک
    سلام عزیز،
    اینکه شما می خوای خوبه ولی نه فایده ای داره نه مقرون به صرفه است!
    ...
    بعد اگه کسی اینو مطالعه کرد بمن بگه من DLL که دارم بهش بدم. از این به بعد خودتون میتونین هر کاری که می خواین بکنین.
    اگر بخواهیم در شبکه استفاده کنیم ممکن است روی هر سیستم بایک شماره پورت جدا متصل شده باشد. در آنصورت چه کنیم؟به ازای هر سیستم در شبکه باید یک رکورددر دیتابیسمون وجود داشته باشه؟
    در مورد استقاده از ATcommand کاملاً با شما موافقم. هرچند که میگن نباید چرخ رو از نو اختراع کرد. اما من واقعاً بااین چرخهای ساخته شده مشکل دارم و برای من نمیچرخه!
    مثلاً در مورد Kylix مشکلم این هست که با مودمم سازگار نیست.
    درمورد mcore :اس ام اس ها را نمیتواند بخواند . یعنی گاهی اوقات ارور میده و گاهی میخونه.
    فعلاً توسط GSMCommunication تونستم وصل بشم. اما بازم تمام خواسته هاموبرآورده نمیکنه. مثلاً میخوام پیغام تحویل بده.
    در مورد dll ای که فرمودید نوشتید. چه طور میتونیم تهیه کنیم؟چه امکاناتی داره؟

  5. #5
    کاربر دائمی آواتار faravaghi
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    پست
    233

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    نقل قول نوشته شده توسط f_pakzad مشاهده تاپیک
    اگر بخواهیم در شبکه استفاده کنیم ممکن است روی هر سیستم بایک شماره پورت جدا متصل شده باشد. در آنصورت چه کنیم؟به ازای هر سیستم در شبکه باید یک رکورددر دیتابیسمون وجود داشته باشه؟
    پیشنهاد من اینه که به ازای هر نسخه از نرم افزار که قراره رو هر کلاینت نصب بشه یک فایل Configuration داشته باشید، بعد بیاین تنظیمات مودم رو (که اصلا حفاظتی نیست!) تو اون قرار بدین بعد هر وقت برنامه قراره اجرا بشه برید اون فایل رو بخونید و باهاش کار کنید. شاید بپرسین چطوری؟
    میگم بهتون.
    یکی از روشها اینه که فایل Configuration رو در قالب یک فایل XML بسازید.

    <?xml version="1.0" encoding="utf-8"?>
    <Configuration>
    <Name></Name>
    <Phone></Phone>
    <Mobile></Mobile>
    <Fax></Fax>
    <Address></Address>
    <Site></Site>
    <Email></Email>
    <Modem>
    <Port>COM9</Port>
    <BaudRate>9600</BaudRate>
    <DeliveryReport>True</DeliveryReport>
    <AutoDeleteReadMessage>False</AutoDeleteReadMessage>
    <AutoDeleteSendMessage>True</AutoDeleteSendMessage>
    <MessageMemory>2</MessageMemory>
    <MessageValidity>TwelveHours</MessageValidity>
    <ChargeCode>*140*11#</ChargeCode>
    </Modem>
    <ConnectionString>
    <DataSource></DataSource>
    <InitialCatalog></InitialCatalog>
    <UserID></UserID>
    <Password></Password>
    <IntegratedSecurity></IntegratedSecurity>
    <Security></Security>
    </ConnectionString>
    </Configuration>


    بعد برای خواندن اون از روش زیر استفاده کنید:

    using System.Xml;
    using System.IO;

    // Modem:
    private string _Port;
    private int _BaudRate;
    private bool _DeliveryReport;
    private bool _AutoDeleteReadMessage;
    private bool _AutoDeleteSendMessage;
    private int _MessageMemory;
    private string _MessageValidity;
    private string _ChargeCode;

    protected internal void GetModemSetting()
    {
    try
    {
    if (File.Exists(_path))
    {
    XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path));
    vr.ValidationType = ValidationType.None;
    vr.EntityHandling = EntityHandling.ExpandEntities;

    XmlDocument doc = new XmlDocument();
    doc.Load(vr);

    vr.Close();

    foreach (XmlElement element in doc.SelectNodes("//Modem"))
    {
    _Port = element.ChildNodes[0].InnerText;
    _BaudRate = Convert.ToInt32(element.ChildNodes[1].InnerText);
    _DeliveryReport = Convert.ToBoolean(element.ChildNodes[2].InnerText);
    _AutoDeleteReadMessage = Convert.ToBoolean(element.ChildNodes[3].InnerText);
    _AutoDeleteSendMessage = Convert.ToBoolean(element.ChildNodes[4].InnerText);
    _MessageMemory = Convert.ToInt32(element.ChildNodes[5].InnerText);
    _MessageValidity = element.ChildNodes[6].InnerText;
    _ChargeCode = element.ChildNodes[7].InnerText;
    }
    }
    }
    catch (Exception ex) { MessageBox.Show(ex.Message); }
    }


    برای تغییر تنظیمات هم می تونید این جوری کار کنید:

    protected internal void UpdateModem(string iPortName
    , int iBaudRate
    , bool iDeliveryReport
    , bool iAutoDeleteReadMessage
    , bool iAutoDeleteSendMessage
    , int iMessageMemory
    , string iMessageValidity
    , string iChargeCode)
    {
    try
    {
    if (File.Exists(_path))
    {
    XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path));
    vr.ValidationType = ValidationType.None;
    vr.EntityHandling = EntityHandling.ExpandEntities;

    XmlDocument doc = new XmlDocument();
    doc.Load(vr);
    vr.Close();

    foreach (XmlElement element in doc.SelectNodes("//Modem"))
    {
    XmlNode root = doc.DocumentElement["Modem"];

    //Replace the Port Element Of XML Document
    XmlElement elemPort = doc.CreateElement("Port");
    elemPort.InnerText = iPortName;
    root.ReplaceChild(elemPort, root.ChildNodes[0]);

    //Replace the BaudRate Element Of XML Document
    XmlElement elemBaudRate = doc.CreateElement("BaudRate");
    elemBaudRate.InnerText = iBaudRate.ToString();
    root.ReplaceChild(elemBaudRate, root.ChildNodes[1]);

    //Replace the SkinDataGrid Element Of XML Document
    XmlElement elemDeliveryReport = doc.CreateElement("DeliveryReport");
    elemDeliveryReport.InnerText = iDeliveryReport.ToString();
    root.ReplaceChild(elemDeliveryReport, root.ChildNodes[2]);

    //Replace the AutoDeleteReadMessage Element Of XML Document
    XmlElement elemAutoDeleteReadMessage = doc.CreateElement("AutoDeleteReadMessage");
    elemAutoDeleteReadMessage.InnerText = iAutoDeleteReadMessage.ToString();
    root.ReplaceChild(elemAutoDeleteReadMessage, root.ChildNodes[3]);

    //Replace the AutoDeleteSendMessage Element Of XML Document
    XmlElement elemAutoDeleteSendMessage = doc.CreateElement("AutoDeleteSendMessage");
    elemAutoDeleteSendMessage.InnerText = iAutoDeleteSendMessage.ToString();
    root.ReplaceChild(elemAutoDeleteSendMessage, root.ChildNodes[4]);

    //Replace the MessageMemory Element Of XML Document
    XmlElement elemMessageMemory = doc.CreateElement("MessageMemory");
    elemMessageMemory.InnerText = iMessageMemory.ToString();
    root.ReplaceChild(elemMessageMemory, root.ChildNodes[5]);

    //Replace the MessageMemory Element Of XML Document
    XmlElement elemMessageValidity = doc.CreateElement("MessageValidity");
    elemMessageValidity.InnerText = iMessageValidity.ToString();
    root.ReplaceChild(elemMessageValidity, root.ChildNodes[6]);

    //Replace the ChargeCode Element Of XML Document
    XmlElement elemChargeCode = doc.CreateElement("ChargeCode");
    elemChargeCode.InnerText = iChargeCode.ToString();
    root.ReplaceChild(elemChargeCode, root.ChildNodes[7]);
    }

    doc.Save(_path);

    _Port = iPortName;
    _BaudRate = iBaudRate;
    _DeliveryReport = iDeliveryReport;
    _AutoDeleteReadMessage = iAutoDeleteReadMessage;
    _AutoDeleteSendMessage = iAutoDeleteSendMessage;
    _MessageMemory = iMessageMemory;
    _MessageValidity = iMessageValidity;
    _ChargeCode = iChargeCode;
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }


    البته اگه گیر به پسورد و این چیزا ندین!!! برای اینم راه داره. یعنی بیاین این چیزا که امنیتی است رو کد کنید و بعد ذخیره کنید. حالا این تاپیک جاش نیست ولی اگه کسی خواست براش بگم.

  6. #6
    کاربر دائمی آواتار f_pakzad
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    مازندران
    پست
    185

    نقل قول: ارسال SMS به وسیله گوشی ... مودم ... اینترنت

    نقل قول نوشته شده توسط faravaghi مشاهده تاپیک
    پیشنهاد من اینه که به ازای هر نسخه از نرم افزار که قراره رو هر کلاینت نصب بشه یک فایل Configuration داشته باشید، بعد بیاین تنظیمات مودم رو (که اصلا حفاظتی نیست!) تو اون قرار بدین بعد هر وقت برنامه قراره اجرا بشه برید اون فایل رو بخونید و باهاش کار کنید. شاید بپرسین چطوری؟
    میگم بهتون.

    [/LEFT]
    یک راه دیگر هم پیداکردم. ابتدا توسط دستور زیر پورتها را پیدامیکنیم
    ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_POTSModem");
    foreach (ManagementObject mo in mos.Get())
    {

    listBox1.Items.Add(mo["Caption"].ToString());
    //listBox1.Items.Add(mo["StatusInfo"].ToString());

    listBox1.Items.Add(mo["AttachedTo"].ToString());

    }
    سپس از متد IsConnected در یک حلقه استفاده میکنیم و برای همه پورتها آن را چک میکنیم. ضمن اینکه ابتدا و انتهای حلقه باید پورت را باز و بسته کنیم. و به این صورت میتونیم شماره پورتی که gsmmodem بهش متصل هست رو پیدا کنیم.(مگر اینکه دو تا gsm وصل باشه!)
    البته روش شما علمی تر هست ولی بعضی کاربران حوصله یادگرفتن و تنظیم و.. ندارند. بنابراین مجبوریم به روش هلو..برو تو گلو...واسشون بنویسیم!

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

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