1

我已经开发了 ac# 应用程序,用于使用 C# 的 GSMCOMM 库发送短信。但是我面临三天的问题是,当我尝试使用 gsmcomm objects.send message methode 发送消息时。有时它会给出电话异常未连接,有时它会给出异常端口未打开。我在下面分享我的代码:用于将 pc 连接到手机 gsm 调制解调器的代码。有时它会毫无例外地发送消息。
手机连接电脑的代码。

private bool ConnectPhone() 
    {
        string conectionStr = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
        clsFileLogger.VerifyLogFileDirectory();
        clsFileLogger.WriteToLog("DB Connection: " + conectionStr);
        conn = new SqlConnection(@conectionStr);
        int port = Convert.ToInt32(ConfigurationSettings.AppSettings["port"]);
        int baudRate = Convert.ToInt32(ConfigurationSettings.AppSettings["baudRate"]);
        int timeout = Convert.ToInt32(ConfigurationSettings.AppSettings["timeout"]);
        gsmComm = new GsmCommMain(port, baudRate, timeout);
        try
        {
            Isconnected = false;
            if (gsmComm.IsConnected() == false)
            {
                gsmComm.Open();
            }

            Isconnected = gsmComm.IsConnected();

            clsFileLogger.WriteToLog("\nConnected with GSM Modam");
        }
        catch (Exception)
        {
            clsFileLogger.WriteToLog("\nUnable to open the port.");
        }
        return Isconnected;
    }


和发送短信的代码

  if (gsmComm.IsConnected() == false)
                    {
                        this.ConnectPhone();
                    }

                    pdu = new SmsSubmitPdu(strSMS, cellNO, "");
                    gsmComm.SendMessage(pdu);

 catch (Exception ex)
                {

                    throw ex;
                }
4

2 回答 2

5

当您使用 gsmcomm .. 首先,在我的 vb.net 专家的组合框中列出您的 comPorts .. 您可以阅读此代码并将其转换为 C# 1) 在您的表单和 form_load 中创建一个组合框,编写此代码

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each prt In My.Computer.Ports.SerialPortNames
            comboBox1.Items.Add(prt)  
        Next
 End Sub

在 from 的全局范围内,编写此代码

            Public Property mymodem As GsmCommMain

向您的项目添加一个子项目,如下所示

   Private Sub connect()
    Try
        Cursor.Current = Cursors.WaitCursor
        If comboBox1.Text = "" Then Return
        If IsNothing(mymodem) Then mymodem = New GsmCommMain(comboBox1.Text)
        If Not mymodem.IsOpen Then mymodem.Open()
        Cursor.Current = Cursors.Default
    Catch ex As Exception
        richTextBox1.AppendText(ex.Message & vbCrLf) 'i add a richtextbox to my form for show exceptions and my produced declaration
    End Try
End Sub

之后为手机号码放置一个文本框.. 将其命名为 txttel 也为 textMessage 放置一个文本框 .. 将其命名为 txtMSG 放置一个向您发送消息的按钮.. 将其命名为 btnsend 剩余的代码将是这样的..

  Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
            If String.IsNullOrEmpty(txtMSG.Text.Trim) Then Return
               SendSMS()

   End Sub


  Private Sub SendSMS()
     Try
          If Not mymodem.IsOpen Then connect()
          Dim pdu As New SmsSubmitPdu(txtMSG.Text.Trim & vbCr, txtTel.Text)
          mymodem.SendMessage(pdu)
          richTextBox1.AppendText("your message sent successfully")
      Catch ex As Exception
          richTextBox1.AppendText(ex.Message)
     End Try
  End Sub

最后一定要关闭你的端口..像这样

  Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    If Not IsNothing(mymodem) AndAlso mymodem.IsOpen Then
        mymodem.Close()
    End If
  End Sub
于 2015-12-02T15:58:11.657 回答
1

试试这些指南(对我很有帮助): http: //www.codeproject.com/Articles/325731/Bulk-SMS-Sender http://www.codeproject.com/Articles/20420/How-To-Send-和接收短信使用 GSM 调制解调器

但似乎您的 com-port 打开问题不在您的代码中。尝试使用诸如 Teraterm 应用程序之类的东西来测试您的端口。并确保在您开始运行应用程序时端口未打开(在上次启动后它可能仍处于打开状态)。

于 2013-07-08T14:14:27.300 回答