呵呵。
短信开发,不灭的话题呀。下面是我搜索CSDN整理来的:(仅参考)> ok,我告诉你有哪些技术问题,第一个是winsock网络程序的写法,你写过吗> 其实发短消息是个很简单的过程,我说过了,互联网上有一些短消息网关,你只要跟它建立socket连接,然后把消息往那里发就可以了。它就会自动转发给手机用户,发给手机用户的消息是MT(message terminate)消息,> 当然数据是要有一定格式的,它的格式就是要符合cmpp1.2协议了> 这个协议你可以在yahoo上查找> (中国短消息点对点协议--由中国移动负责制定)你可以到移动梦网去看看了> 所以,这里面关键的技术只有两点,一个是socket编写程序,另外一个就是发送的数据格式> 不需要用什么api,你可以直接用CAsynaSocket继承一个类来做,如果你是做多线程的,那么用CWinThread继承一个线程,来处理就可以了。> 我说的不多,但够你消化的,总之这样做一定能做出来> 吃饭不必了:)大家互相帮助,互相提高嘛,有什么问题,还可以继续问我> 有一点提醒你注意,win Sock是基于消息的,你必须先建立一个窗口用来接收消息,这些很多参考书上都有。你看看就明白了> 记住,发短消息是不需要拨对方的号码的,你只要发到网关,网关就会自动帮你转发。> 至于网关的ip,我不知道是不是公司机密,如果是,我就不能告诉你。我得去问问才能决定呵呵,没错,你明白的好快呀用MFC的Winsock写起来简单,因为你还要实现多线程,用MFC就比较简单,而且你当然还要写个简单的界面给客户看呢我们现在调试的时候用的不是互联网上的网关,而是模拟网关,你明白吗,就是这个模拟网关是自己做的.你要是想要,我可以给你发一个,模拟网关有很多版本,cmpp1.2,cmpp1.21还有联通的,你现在只要试验cmpp1.21的就可以了。对了你还要研究一下MD5加密算法,在cmpp中要用到这个加密,源程序到处都有模拟网关的源程序,等以后时机成熟了,我可以发给你这样,你就不需要网关的IP了,只需要自己起一个模拟网关,然后试着往那里发短消息就可以了你这样发的短消息叫mt消息,就是以手机为终点的短消息,你从网关那里得到的消息是mo消息,用的端口是7890,呵呵,自己看看吧------------------------------------------------
 向手机发短讯,要编程解决有几种方法:1、用手机通过数据线接驳计算机的串口,然后给串口下命令,就可以收发短讯。其AT命令集可在www.etsi.org里找到。2、通过与ISMG(Internet Short Message Gateway)连接,发送短讯。其中中国移动支持的协议为cmpp,该协议可在www.monternet.com里找到;中国联通支持的协议为sgip。3、通过与smsc(短讯中心)连接,发送短讯。其协议为smpp协议。我认为,个人用户可以通过第一种方式发送短讯。因为后两种都需身份认证的。
 
 利用smcc端心中心发送,可能程序比较简单,只需借用一些简单的smpp协议,连接到移动平台的网关,Csocket类。我贴一些以前做的程序上去// SentMsgRS.cpp : implementation file//#include "stdafx.h"#include "SMIClient.h"#include "SentMsgRS.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CSentMsgRSIMPLEMENT_DYNAMIC(CSentMsgRS, CRecordset)CSentMsgRS::CSentMsgRS(CDatabase* pdb) : CRecordset(pdb){ //{{AFX_FIELD_INIT(CSentMsgRS) m_Operate_ID = _T(""); m_User_Number = _T(""); m_Chinese_Flag = 1; m_Message_Content = _T(""); m_Sequence_ID = 0; m_Message_Status = 0; m_Message_ID = _T(""); m_nFields = 7; //}}AFX_FIELD_INIT m_nDefaultType = snapshot;}CString CSentMsgRS::GetDefaultConnect(){ return _T("ODBC;DSN=hello;UID=hello;PWD=hello");}CString CSentMsgRS::GetDefaultSQL(){ return _T("[dbo].[Sent_Message]");}void CSentMsgRS::DoFieldExchange(CFieldExchange* pFX){ //{{AFX_FIELD_MAP(CSentMsgRS) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T("[Operate_ID]"), m_Operate_ID); RFX_Text(pFX, _T("[User_Number]"), m_User_Number); RFX_Int(pFX, _T("[Chinese_Flag]"), m_Chinese_Flag); RFX_Text(pFX, _T("[Message_Content]"), m_Message_Content); RFX_Long(pFX, _T("[Sequence_ID]"), m_Sequence_ID); RFX_Int(pFX, _T("[Message_Status]"), m_Message_Status); RFX_Text(pFX, _T("[Message_ID]"), m_Message_ID); //}}AFX_FIELD_MAP}/////////////////////////////////////////////////////////////////////////////// CSentMsgRS diagnostics#ifdef _DEBUGvoid CSentMsgRS::AssertValid() const{ CRecordset::AssertValid();}void CSentMsgRS::Dump(CDumpContext& dc) const{ CRecordset::Dump(dc);}#endif //_DEBUG