2013-05-16 4 views
1

Я использую последовательный порт для отправки sms через GSM/модем. Мой код работает с одним sms. Проблема возникает, когда я пытаюсь отправить sms навалом. Затем никакие sms не отправляются и никаких исключений не генерируется.Отправка SMS через последовательный порт в C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO.Ports; 
using System.ComponentModel; 
using System.Windows.Forms; 
namespace program.cs 
{ 
    public class Class1 
{ 
    public string[] strarray = new string[10]; 
    SerialPort serialport1 = new SerialPort(); 
    string com = "COM8"; 
    int mybaudrate = 9600; 


    //this.strarray =System.IO.Ports.SerialPort.GetPortNames(); 


    public void getports() 
    { 
     this.strarray = System.IO.Ports.SerialPort.GetPortNames(); 

    } 

    public bool connetport() 
    { 
     bool Isopen; 
     serialport1.Close(); 
     try 
     { 
      if (!this.serialport1.IsOpen) 
      { 
       this.serialport1.PortName = com; 

       this.serialport1.Open(); 
       this.serialport1.BaudRate = mybaudrate; 
       this.serialport1.StopBits = System.IO.Ports.StopBits.One; 
       this.serialport1.Parity = System.IO.Ports.Parity.None; 
       this.serialport1.Handshake = System.IO.Ports.Handshake.None; 

       Isopen= serialport1.IsOpen; 




      } 

      Isopen = true; 


      } 

     catch (Exception ex) 
     { 
      Isopen = false; 
      throw ex; 
     } 
     return Isopen; 
    } 

    public void sendsms() 
    { 
     try 
     { 

      if (this.serialport1.IsOpen) 
      { 

       // to send bulk sms 


       serialport1.BaseStream.Flush(); 

       int loop = 0; 
       int howmany = 0; 

       howmany = 200; 



       while (loop < howmany) 
       { 

        System.Threading.Thread.Sleep(3500); 

        string cb = char.ConvertFromUtf32(26); 
        this.serialport1.Write("AT+CMGF=1\r"); 
        this.serialport1.Write("AT+CSCA=servicecenter\r 
        \n");//Ufone    Service Center      
        this.serialport1.Write("AT+CMGS=\"" + "03468916446" + "\"\r\n");// 
        this.serialport1.Write("hello" + cb);//message text 
        message sending 

        System.Threading.Thread.Sleep(3500); 

        loop++; 


       } 
       MessageBox.Show("Message Sent Number" + loop); 

       serialport1.Close(); 

      } 
     } 
     catch (Exception ex) 
     { 
      serialport1.Close(); 
      throw ex; 
     } 


    } 







} 

}

Class1 выше, используется для подключения и отправки SMS


Код для основной программы

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    bool check; 
    Class1 obj = new Class1(); 
    private void button1_Click(object sender, EventArgs e) 
    { 
     check = obj.connetport(); 
     MessageBox.Show("Connecton Status" + check); 
     obj.sendsms(); 
     MessageBox.Show("have completed"); 
    } 
} 

Я потратил много времени на решение этой проблемы но безуспешно. Ваша помощь будет оценена

+0

Поймите, что Thread.Sleep делает, прежде чем использовать его. Этот цикл займет 23,3 минуты, чтобы завершить то, как у вас есть. И какие ошибки вы получаете. Также не вызывайте serialport1.Close() в начале connectport. Также работайте над своим наименованием и форматированием, например, camelCase. – Kcvin

+0

У меня нет ошибок и выполнение выполнено без ошибок или исключений –

+0

И я думаю, что Thread.sleep (приостанавливает процесс для этих миллисекунд) –

ответ

0

Я бы предложил использовать такой инструмент, как Portmon (http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx), чтобы ваши сообщения получали модем.

Если они есть, вы можете проверить у своего перевозчика, как много из них, смс сообщений в черной дыре. (во избежание спамеров и т.п.)

Смежные вопросы