Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置此COM端口?_C#_Exception_Serial Port - Fatal编程技术网

C# 如何设置此COM端口?

C# 如何设置此COM端口?,c#,exception,serial-port,C#,Exception,Serial Port,我有一个windows服务,它可以在COM端口上侦听来自GSM调制解调器的传入文本,然后将该消息插入SQL数据库 我已经告诉我的服务在我的服务器上记录文本文件的任何异常,显然它一直抛出一个异常,说请求的资源正在使用 我假设这与COM端口有关,但是,我看不出哪里出了问题,我希望获得一些关于如何释放COM端口并使我的代码正常工作的指导,我的代码如下,任何和所有帮助都将不胜感激 我正在使用第三方库GSMComm来实现这一点 private SmsServer server; private strin

我有一个windows服务,它可以在COM端口上侦听来自GSM调制解调器的传入文本,然后将该消息插入SQL数据库

我已经告诉我的服务在我的服务器上记录文本文件的任何异常,显然它一直抛出一个异常,说请求的资源正在使用

我假设这与COM端口有关,但是,我看不出哪里出了问题,我希望获得一些关于如何释放COM端口并使我的代码正常工作的指导,我的代码如下,任何和所有帮助都将不胜感激

我正在使用第三方库GSMComm来实现这一点

private SmsServer server;
private string appDataDirectory;
private string logFilePath;
GsmCommMain Comm = new GsmCommMain("COM7",9600,300);
GsmPhone GSM = new GsmPhone("COM7", 115200, 30000);

private void SMSGetter()
{      
    Log("Getter Fired");

    //var message = GSM.ReadMessage(4);
    //GSM.ReadMessage(4);
    //TcpClientChannel client = new TcpClientChannel();
    //ChannelServices.RegisterChannel(client, false);
    //string url = "192.168.100.67:2000";
    //ISmsSender smssender = (ISmsSender)Activator.GetObject(typeof(ISmsSender), url);

    try
    {
        if (GSM.IsOpen()==false && Comm.IsOpen()==false)
        {
            GSM.Open();
            Comm.Open();
            DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
            SqlConnection Conn = new SqlConnection("Data Source=tcp:crusader,49172;Initial Catalog=HermesSMS;User ID=admin;Password=w");
            SqlCommand com = new SqlCommand();
            com.Connection = Conn;
            Conn.Open();
            com.CommandText = ("INSERT INTO SMSArchives(ID,Message,Blacklist) VALUES ('" + messages + "', 'Yes')");
            com.ExecuteNonQuery();
            Conn.Close();
            GSM.Close();
            Comm.Close();
            return;
        }
        else if (GSM.IsOpen()==true && Comm.IsOpen()==true)
        { 
            DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
            SqlConnection Conn = new SqlConnection("Data Source=tcp:crusader,49172;Initial Catalog=HermesSMS;User ID=admin;Password=w");
            SqlCommand com = new SqlCommand();
            com.Connection = Conn;
            Conn.Open();
            com.CommandText = ("INSERT INTO SMSArchives(ID,Message,Blacklist) VALUES ('" + messages + "', 'Yes')");
            com.ExecuteNonQuery();
            Conn.Close();
            GSM.Close();
            return;
        }
    }
}

代码尝试打开COM7两次。

通常无法在共享模式下打开COM端口,因此无法打开COM7两次,这就是出现异常的原因

即使出于某种原因,您可以使用两个句柄打开同一个COM端口,但指定了两个波特率,这意味着一个流或另一个流将显示为您的服务已损坏

您需要选择其中一个,并通过单个管道传输所有数据。我不知道您的系统打算如何工作,但您需要阅读文档或与供应商联系,了解您应该如何获取数据


一个可能的修复方法是简单地从代码中删除所有GSM.xxx()调用-看起来您只是打开和关闭该资源,但它从未在代码中用于获取任何数据。

正如它所预期的那样;GSM调制解调器在COM7上,这两种方法都需要使用COM7作为端口名。如果这就是问题所在,我如何解决这种冲突?谢谢普雷斯顿,我实际上并不知道!