PDA

View Full Version : سوال: pdu و ارسال sms در C#



vahid2112
شنبه 12 اسفند 1391, 10:41 صبح
سلام
برای ارسال پیامک در برنامه ویندوزی، به مبحثی بنام pdu میرسیم
اما هرچی گشتم، تو وب توضیحی در مورد pdu پیدا نکردم
اصلا pdu چیه و چه کاربردی داره؟

Esmail Solhkhah
شنبه 12 اسفند 1391, 23:06 عصر
مطلب از همین سایت خودمون (http://barnamenevis.org/showthread.php?108432-PDU-Encoding-And-Decoding)

موفق باشید.

vahid2112
شنبه 12 اسفند 1391, 23:51 عصر
ممنون
این مطلب رو تا یه جایی دنبال کردم برای آموزش خیلی مطلب خوبیه
ولی اصلا به معرفی نپرداخته و از همون اول رفته سراغ آموزش!
من دنبال یه معرفی ساده از pdu هستم
تو سایت که ندیدم
تو اینترنتم نبود
اگه شما سراغ دارید یه زحمت بکشید بذارید.

Esmail Solhkhah
یک شنبه 13 اسفند 1391, 00:11 صبح
ممنون
تشکر لازم نیست ،اعدامش کنید. دکمه تشکر Please


این مطلب رو تا یه جایی دنبال کردم برای آموزش خیلی مطلب خوبیه
ولی اصلا به معرفی نپرداخته و از همون اول رفته سراغ آموزش!

دو روش جهت ارسال و دریافت پیام کوتاه داریم Text - PDU

تو فرمت تکست (AT+CMGF=1) متن مربوطه (متن پیام کوتاه) بصورت کاراکترهای اسکی در نظر گرفته میشه.

تو فرمت PDU با دستور AT+CMGF=0 متن پیام کوتاه شامل شماره مرکز پیام - مدت زمان معتبر بودن - شماره مقصد و ... هست که تو همون تاپیک بالایی که اشاره کردم مفصل بحث شده.

دقت کنید برای ارسال فارسی UCS2 رو در نظر بگیرید.

موفق باشید.

vahid2112
یک شنبه 13 اسفند 1391, 00:18 صبح
یه مشکلی من اینجا دارم، این متد ارسال منه

public string SendSMS(string PhoneNo, string Message)
{
SMS_is_Disable();
string s = "";

comPort.Write("AT+CSCA=\"" + callservice + "\"" + (char)13);


GO = false; ERROR = false; OK = false;
for (int i = 0; i < 100; i++)
{
if (OK == true)
break;
if (ERROR == true)
{
MessageBox.Show("ERROR");
return "ERROR";
}
System.Threading.Thread.Sleep(15); if (i == 100) ERROR = true;
}
///
comPort.Write("AT+CMGS=\""+ PhoneNo + "\"" + (char)13);
///


GO = false; ERROR = false; OK = false;
for (int i = 0; i < 100; i++)
{
if (OK == true)
break;
if (ERROR == true)
{
MessageBox.Show("ERROR");
return "ERROR";
}
System.Threading.Thread.Sleep(15); if (i == 100) ERROR = true;
}

s += "\r" + comPort.ReadExisting();

///
comPort.Write(Message + (char)26);
///

GO = false; ERROR = false; OK = false;
for (int i = 0; i < 100; i++)
{
if (OK == true)
{


break;
}
if (ERROR == true)
{
MessageBox.Show("ERROR");
return "ERROR";
}
System.Threading.Thread.Sleep(15); if (i == 100) ERROR = true;
}



s += "\r" + comPort.ReadExisting();

comPort.Close();
return s;
}


حالا نمیدونم چطور برای ارسال فارسی UCS2 رو در نظر بگیرم!

vahid2112
یک شنبه 13 اسفند 1391, 00:36 صبح
منظورم اینه که ucs2 رو باید کجا اضافه کنم؟

vahid2112
یک شنبه 13 اسفند 1391, 07:07 صبح
سلام
دوستان کسی نمیدونه راهنمایی کنه؟

Esmail Solhkhah
یک شنبه 13 اسفند 1391, 22:02 عصر
شما با کدی که گذاشتید میخواهید ارسال تکست داشته باشید،روش ارسال PDU اینطور نیست.

گام اول AT+CMGF=0

بعد باید PDU رو بسازید.

دقت کنید شماره مقصد،شماره SMS Center ، خود پیام و ... دیگه اونجا داخل PDU قرار میگیرن که نهایت بصورت یه رشته هگز هست و همونجا هست که شما باید UCS2 رو ست

کنید،نهایتا این رشته رو ارسال کنید به پورت.

موفق باشید.

vahid2112
یک شنبه 13 اسفند 1391, 22:20 عصر
گام اول AT+CMGF=1




منظورتون از این چیه؟

vahid2112
یک شنبه 13 اسفند 1391, 22:26 عصر
میدونید من خیلی گیج شدم:متعجب:
آخه چند تا پروژه از همین سایت گرفتم که با PDU کار شده بود
ولی خیلی گیج کننده بود
اصلا روال کار با pdu برای ارسال پیام واضح نبود
خیلی هم قروقاطی بود
همین باعث شده گیج بشم
اگه میشد از نوشتن یه پروژه شروع کنیم خیلی خوب بود:لبخندساده:

Esmail Solhkhah
یک شنبه 13 اسفند 1391, 22:53 عصر
منظورتون از این چیه؟

سویچ GSM MODEM به مد PDU

تنها نکته مهم ساخت PDU هست ، تو همین سایت فکر کنم نمونه هست

بعد ارسال عین ارسال عادی هست فقط دیگه شماره مقصد رو نمیدید و بجای متن پیام کوتان رشته PDU رو ست میکنید.

موفق باشید.

vahid2112
یک شنبه 13 اسفند 1391, 23:04 عصر
سویچ GSM MODEM به مد PDU


این سوییچ کردن منو گیج کرده!





تنها نکته مهم ساخت PDU هست ، تو همین سایت فکر کنم نمونه هست


ساخت PDU هم فکر کنم چند متد براش تو پروژه های همین سایت هست.

Esmail Solhkhah
یک شنبه 13 اسفند 1391, 23:17 عصر
این سوییچ کردن منو گیج کرده!چرا ؟
فضیه خیلی سادس ، 2 تا مد داریم
AT+CMGF=1 برای ارسال تکست (مد عادی همونی که تو کد استفاده کردید)
AT+CMGF=0 برای ارسال PDU

به عنوان نمونه خود کامپوننت MCore تو لایه پایین تر برای ارسال یونیکد از همین فرمت PDU استفاده میکنه و صریحا دستور AT+CMGF=1 رو به پورت میفرسته. در حالی که کلاسی که به برنامه نویس داده یه سری متدهای سطح بالاتر داره.

vahid2112
یک شنبه 13 اسفند 1391, 23:26 عصر
یعنی بجای:

comPort.Write("AT+CMGF=0\""+ PhoneNo + "\"" + (char)13);



باید اینو بنویسم:


comPort.Write("AT+CMGF=1"+ "Pdu رشته حاوی کد ");

vahid2112
یک شنبه 13 اسفند 1391, 23:27 عصر
یعنی بجای:

comPort.Write("AT+CMGF=0\""+ PhoneNo + "\"" + (char)13);



باید اینو بنویسم:


comPort.Write("AT+CMGF=1"+ "Pdu رشته حاوی کد ");

Esmail Solhkhah
دوشنبه 14 اسفند 1391, 00:00 صبح
اولا که ببخشید ، اشتباها مد PDU رو 1 نوشته بودم که 0 هست. تصحیح شد یه بار AT+CMGF=0 رو به پورت بفرستید یه بار AT+CMGS= Pdu Length - نحوه محاسبه Pdu Lenght هم تو تاپیک مربوطه اگه اشتباه نکنم اشاره شده. یه بار خود PDU بعد PDU باید یه CTRL+Z بفرستید تمام اینها رو میتونید با هایپرترمینال هم تست کنید. موفق باشید.

naskam
پنج شنبه 28 فروردین 1393, 12:15 عصر
سلام دوست عزیز من برای ارسال پیام فارسی از روش pdu استفاده کردم که بصورت زیر کدها مو نوشتم اما مودم خطا میده ضمنا pdu تولید شدمو تست کردم درست هست تنها مشکلم در نحوه ارسالش هست.

کد :
;

port.Open();
port.WriteLine("AT+CMGF=0" + (char)(13));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.WriteLine("AT+CMGS=" + ((pduSource.Length / 2)-1) + (char)(13));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.WriteLine(pduSource + char.ConvertFromUtf32(26));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.Close()

Afshin160
سه شنبه 19 خرداد 1394, 16:12 عصر
سلام .
من تقریبا با ارسال و دریافت sms فارسی و انگلیسی مشکلی ندارم .
ولی یه سوال بد جور فکرم مشغول کرده و اونم اینه که چطور یک سری sms ها به جای شماره فرستنده نام اون تو گوشی ثبت میشه ؟ مثل بانک ها ... آیا میشه با اعمال تغییرات در PDU ارسالی چنین کاری کرد ؟
البته تقریبا تمام اونها از طریق انترنت ارسال شده اند و نه از طریق GSM modem

با تشکر

Afshin160
دوشنبه 25 خرداد 1394, 13:15 عصر
سلام .
گویا به صورت شخصی نمیشه شماره مقصد را با نام جایگزین کرد . و باید با دسترسی مرکز پیام باشه ....!!!؟



یه سوال در رابطه با Flash SMS داشتم ....
1- نوع فرمت sms باید text mode باشه یا PDU ؟
2- باید متن را 7bit کد کنم یا 16bit ؟
3- کد گزارش مرکز پیام و یا نوع پروتوکل را باید تغییر بدم ؟

متشکر میشم کمکم کنید .

MehdiElexal
دوشنبه 25 خرداد 1394, 14:55 عصر
سلام .
گویا به صورت شخصی نمیشه شماره مقصد را با نام جایگزین کرد . و باید با دسترسی مرکز پیام باشه ....!!!؟



یه سوال در رابطه با Flash SMS داشتم ....
1- نوع فرمت sms باید text mode باشه یا PDU ؟
2- باید متن را 7bit کد کنم یا 16bit ؟
3- کد گزارش مرکز پیام و یا نوع پروتوکل را باید تغییر بدم ؟

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

danial82
پنج شنبه 20 اسفند 1394, 05:06 صبح
سلام دوست عزیز من برای ارسال پیام فارسی از روش pdu استفاده کردم که بصورت زیر کدها مو نوشتم اما مودم خطا میده ضمنا pdu تولید شدمو تست کردم درست هست تنها مشکلم در نحوه ارسالش هست.

کد :
;

port.Open();
port.WriteLine("AT+CMGF=0" + (char)(13));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.WriteLine("AT+CMGS=" + ((pduSource.Length / 2)-1) + (char)(13));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.WriteLine(pduSource + char.ConvertFromUtf32(26));
Thread.Sleep(200);
richTextBox1.Text += port.ReadExisting();
port.Close()


کسی مشکل این کد رو میدونه چیه
بنظر مشکلی نداره ولی ارور +CMS ERROR: 500 میده

s3rv3r
پنج شنبه 20 اسفند 1394, 05:17 صبح
مشکلش اینه که طول pdu رو صحیح وارد نمیشه