短信猫的开发

emperordj 2008-12-12 12:24:36
公司买了个短信猫,是北京都信技术公司的,可我从来没弄过这个,一点头绪都没有,购买时配了用C#开发的程序,以及动态链接库,现在情况是这样的:
1.用B/S结构
2.短信猫放在服务器上,客户端可通过服务器端的短信猫来发送和接收短信
3.可以自动发送放在数据库中的短信,设定待发时间,按照时间发送

现在我做的有这些:
1.可以连接到终端,然而断开之后再连接,却连接不上
2.怎么实现让它自动拉取数据库中的数据发送(按事先设定的时间自动发送)

贴出部分代码:

购买时附带的接口函数

Sms_Connection(Com_Port As Integer,Com_BaudRate As Integer, Mobile_Type As String) As Integer
Sms_Connection函数说明如下:
功能描述:用于初始化终端与串口的连接
Com_Port:串口号(0为红外接口,1,2,3,...为串口)
Com_BaudRate:波特率
Mobile_Type:返回终端型号
Sms_Connection:返回值(0:连接终端失败;1:连接终端成功)

Sms_Send(Sms_TelNum As String, Sms_Text As String) As Integer
Sms_Send函数说明如下:
功能描述:发送短信
Sms_TelNum:发送给的终端号码
Sms_Text:发送的短信内容
Sms_Send:返回值(0:发送短信失败;1:发送短信成功)

Sms_Disconnection() As Integer
Sms_Disconnection函数说明如下:
功能描述:断开终端与串口的连接


dll的调用

using System;
using System.Runtime.InteropServices;

namespace WebSys
{
/// <summary>
/// Dll的转载和调用
/// </summary>
public class DllInvoke
{
[DllImport("kernel32.dll")]
private extern static IntPtr LoadLibrary(String path);

[DllImport("kernel32.dll")]
private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);

[DllImport("kernel32.dll")]
private extern static bool FreeLibrary(IntPtr lib);

private static IntPtr hLib;

public DllInvoke()
{

}

/// <summary>
/// 加载Dll,并将要执行的函数转换为委托
/// </summary>
/// <param name="DLLPath">Dll的路径</param>
/// <param name="APIName">转换的函数</param>
/// <param name="t">委托类型</param>
/// <returns>将函数转换为委托</returns>
public Delegate Invoke(String DLLPath, String APIName, Type t)
{
//加载Dll
hLib = LoadLibrary(DLLPath);
//将要执行的函数转换为委托
IntPtr api = GetProcAddress(hLib, APIName);
return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
}

/// <summary>
/// 卸载 Dll
/// </summary>
public void UnLoadDll()
{
bool ret = FreeLibrary(hLib);
hLib = IntPtr.Zero;
}
}
}


dll中函数的调用

namespace WebSys
{
/// <summary>
/// Dll中函数的调用
/// </summary>

public delegate uint Sms_Connection(String CopyRight, uint Com_Port, uint Com_BaudRate, ref String Mobile_Type, ref String CopyRightToCOM);
public delegate uint Sms_Disconnection();
public delegate uint Sms_Send(string Sms_TelNum, string Sms_Text);

public class DecryptCommon
{
DllInvoke dll = new DllInvoke();
public DecryptCommon()
{

}

/// <summary>
/// 连接终端,返回连接状态:连接成功返回串口号,连接失败返回空
/// </summary>
/// <param name="strPort">串口号</param>
/// <returns>返回连接状态</returns>
public string Set_Sms_Connection()
{
//连接终端,串口号从1到9判断
string strRtn = "";
String strCopyRight = "//上海迅赛信息技术有限公司,网址www.xunsai.com//";
uint Com_BaudRate = 9600;
String strType = "";
String strCopyRightToCOM = "";
try
{
Sms_Connection Connection = (Sms_Connection)dll.Invoke(System.Web.HttpContext.Current.Server.MapPath(@"~/Bin/sms.dll"),"Sms_Connection", typeof(Sms_Connection));
for (uint Com_Port = 1; Com_Port < 10; Com_Port++)
{
if (Connection(strCopyRight, Com_Port, Com_BaudRate, ref strType, ref strCopyRightToCOM) == 1)
{
strRtn = Com_Port.ToString();
break;
}
}
}
catch(Exception ex)
{
strRtn = ex.Message;
}
finally
{
dll.UnLoadDll();
}
return strRtn;
}
public void Set_Sms_Disconnection()
{
//断开终端
try
{
Sms_Disconnection Disconnection = (Sms_Disconnection)dll.Invoke(System.Web.HttpContext.Current.Server.MapPath(@"~/Bin/sms.dll"),"Sms_Disconnection", typeof(Sms_Disconnection));
Disconnection();
}
catch
{
throw (new Exception());
}
finally
{
dll.UnLoadDll();
}
}

/// <summary>
/// 发送短信,返回发送状态
/// </summary>
/// <param name="Sms_TelNum">发送电话号码</param>
/// <param name="Sms_Text">发送内容</param>
/// <returns>返回状态:1为成功;0为失败.</returns>
public string Set_Sms_Send(string Sms_TelNum, string Sms_Text)
{
//发送短信
string strRtn = "0";
try
{
Sms_Send Send = (Sms_Send)dll.Invoke(System.Web.HttpContext.Current.Server.MapPath(@"~/Bin/sms.dll"),"Sms_Send", typeof(Sms_Send));
strRtn = Send(Sms_TelNum, Sms_Text).ToString();
}
catch
{
throw (new Exception());
}
finally
{
dll.UnLoadDll();
}
return strRtn;
}
}
}


然后在页面调用上面封装的函数
...全文
375 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
caijialu 2009-09-01
  • 打赏
  • 举报
回复
你这是短信猫与串口连接的,如果改成USB接口会不会运行起来?
Robin 2008-12-12
  • 打赏
  • 举报
回复
非常好
dengchenlu 2008-12-12
  • 打赏
  • 举报
回复
晕死
用个Timer
直接获取数据库的数据然后用for啊
我刚做了一个
不过跟你用的不是同一个DLL
qq175691524 2008-12-12
  • 打赏
  • 举报
回复
接口我跟你说的很清楚,这个不算问题了。。。仁者见仁智者见智。
net_xiaojian 2008-12-12
  • 打赏
  • 举报
回复
来学习这玩意儿。
emperordj 2008-12-12
  • 打赏
  • 举报
回复
若是发送表自己建的呢,怎么关联?
qq175691524 2008-12-12
  • 打赏
  • 举报
回复
如果你要自动拉取数据定时发送的话,建议写成windows服务
qq175691524 2008-12-12
  • 打赏
  • 举报
回复
发送表有个发送时间字段,你只要负责把数据写入数据库据,在时间到了的时候设备就会自动把短信发出去的。
wojiushiliumang 2008-12-12
  • 打赏
  • 举报
回复
学习
emperordj 2008-12-12
  • 打赏
  • 举报
回复
To:moudy
老板要求这样,谁让人家是发工资的,有什么办法吗?
emperordj 2008-12-12
  • 打赏
  • 举报
回复
To:qq175691524
似乎你做过这个?
现在接收/发送短信都没问题
问题是怎么让它自动拉取数据表的记录发送短信?写个方法?在哪里写,怎么写?我快晕叼了
moudy 2008-12-12
  • 打赏
  • 举报
回复

oooO ↘┏━┓ ↙ Oooo
( 踩)→┃你┃ ←(死 )
\ ( →┃√┃ ← ) /
  \_)↗┗━┛ ↖(_/
踩一个,嘿嘿。

你用WINFORM做不就好了,定时器取数据库发送时间,到时间就发,然后打个标记。发送接收函数都是他们封装好的,会有什么问题?
qq175691524 2008-12-12
  • 打赏
  • 举报
回复
这个你不用管的,这个是短信设备里面自带的功能,你只要负责把时间写入数据库中去。
如果你做的只是发送和接收短信的话,那么你用到的就比较简单了!接收短信用ajax,定时去掉设备上数据库的短信表就是了
Sms_Send Sms_Revices发送接收表,还有点印象
emperordj 2008-12-12
  • 打赏
  • 举报
回复
ls的大哥,有没有什么办法解决我的问题阿,沉得真快

62,248

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧