QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1375|回复: 13

终端向手机发短信的程序

[复制链接]
发表于 2004-8-3 09:29:40 | 显示全部楼层 |阅读模式
终端向手机发短信的程序

怎么写。

用C在LINUX写
发表于 2004-8-3 10:32:41 | 显示全部楼层
要知道标准。比如如何与手机服务网关通信?
回复

使用道具 举报

发表于 2004-8-3 10:54:24 | 显示全部楼层
我的手机没有与电脑的连线,所以感兴趣也没法试呀。

关注中...
回复

使用道具 举报

发表于 2004-8-3 13:38:03 | 显示全部楼层
1.用手机:
手机必须能上WAP网(这样才有调制解调器),找到这个手机的参数,主要是这个手机的AT指令和串口的连线,向手机发送AT指令来发送短信!
2.用GSM调制解调器
具体可以看调制解调器的说明!
回复

使用道具 举报

 楼主| 发表于 2004-8-3 13:59:28 | 显示全部楼层
[quote:58382f6c41="Rayfox"]1.用手机:
手机必须能上WAP网(这样才有调制解调器),找到这个手机的参数,主要是这个手机的AT指令和串口的连线,向手机发送AT指令来发送短信!
2.用GSM调制解调器
具体可以看调制解调器的说明![/quote]
你知道?
知道就告诉我吧!!
/* Set the baud rates to 19200..*/
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);  

/* Enable the receiver and set local mode...*/
options.c_cflag |= (CLOCAL | CREAD);

/* Set c_cflag options.*/
options.c_cflag &= ~PARENB;     //无校验
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;     //1个停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;         //8个数据位

/* Set c_iflag input options */
options.c_iflag &=~(IXON | IXOFF | IXANY);
options.c_iflag &=~(INLCR | IGNCR | ICRNL);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);  

/* Set c_oflag output options */
options.c_oflag &= ~OPOST; //RAW数据模式

这是设置终端的参数!
停止位。波B19200,数据位1。。。。
回复

使用道具 举报

 楼主| 发表于 2004-8-3 14:00:47 | 显示全部楼层
[quote:4b76486c27="lanche"]我的手机没有与电脑的连线,所以感兴趣也没法试呀。

关注中... [/quote]
可以用红外线啊!!
回复

使用道具 举报

 楼主| 发表于 2004-8-3 14:03:43 | 显示全部楼层
#include <stdlib.h>
#include <stdlib.h>
#include <unsisted.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <erro.h>

#define BAUDRATE B19200

char *dev="/dev/ttys0";

void setup_com(int fd){
struct termios options;
tcgetattr(fd, &options);

/* Set the baud rates to 19200..*/
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);  

/* Enable the receiver and set local mode...*/
options.c_cflag |= (CLOCAL | CREAD);

/* Set c_cflag options.*/
options.c_cflag &= ~PARENB;     //无校验
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;     //1个停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;         //8个数据位

/* Set c_iflag input options */
options.c_iflag &=~(IXON | IXOFF | IXANY);
options.c_iflag &=~(INLCR | IGNCR | ICRNL);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);  

/* Set c_oflag output options */
options.c_oflag &= ~OPOST; //RAW数据模式

/* Set the timeout options */
options.c_cc[VMIN] = 10;
options.c_cc[VTIME] = 0;
tcsetattr(fd, TCSANOW, &options); //设置COM参数并立即生效  
}  


int main(int argc, char **argv)
{
        int fd;
        int nread;
        char buff[512];
        char *dev ="/dev/ttyS0";
        fd  = OpenDev(dev);
        if (fd>0)
    set_speed(fd,19200);
        else
                {
                printf("Can't Open Serial Port!\n");
                exit(0);
                }
  while(1)
          {
                   while((nread = read(fd,buff,512))>0)

                   {
                      printf("\nLen %d\n",nread);
                      buff[nread+1]='\0';
                      printf("\n%s",buff);
                    }
          sleep(3)

    //close(fd);
    //exit(0);
}
不知道能不能发短信。

还要在那些地方改动。

帮我改改!


不胜感激!
回复

使用道具 举报

发表于 2004-8-3 14:38:58 | 显示全部楼层
设置串口后就发AT指令
比如
int fd=open(....);
......//设置串口
char buf[4]={"at",0x0a,0x0d};
write(fd,buf,4);//写入AT
read(fd,buf....);//读取数据(如果串口设置正确就要返回OK)
//如果没有成功,就要看看你的设置是不是正确,你的串口的联线是不是正确?
回复

使用道具 举报

发表于 2004-8-3 14:41:39 | 显示全部楼层
这个我也不知道以前到哪个网站搞到的了:现在给你看看
自由口模式下PLC与M20 GSM Modem的通信   
作者: anon
发布日期: 2002.10.01 12:21


单片机与SMS结合可以广泛用在工业、民用控制中,本文详细介绍了PLC驱动手机SMS的编程示例。  


概述
---- 本例说明如何以自由协议实现S7-200与M20 GSM Modem的通信。可实现的功能为:当M20收到GSM短信息时,可以自动向发送方回发一条短信息,信息的内容由用户自行定义。

AT指令:
---- 本例中使用的AT指令主要有四个:

短信息格式选择指令CMGF
---- M20支持两种格式的短信息,PDU格式和TEXT格式。
---- AT+CMGF=0 设置短信为PDU格式(默认)
---- AT+CMGF=1 设置短信为TEXT格式
---- 本例中将使用TEXT格式,因此必须对M20进行初始化。

读短信息指令CMGR
---- 指令格式为:AT+CMGR=< index >,index一般为1到15的整数,视SIM卡的容量而定,它表示所要阅读的短信息在SIM卡中的存储位置。在本例中,由于收到的短信息在阅读后都会被删除,因此每次收到的短信息都会被保存到第一个存储位置,在收到短信息后,用AT+CMGR=1即可阅读。

发送短信息指令CMGS
---- 指令格式为:AT+CMGS=< da >,da为目标手机号,如\"13800138000\"。M20接到指令后返回一个\"〉\"提示输入短信内容,短信内容以CHR(26)结束。

删除短信息指令CMGD
---- 指令格式为:AT+CMGD=< index >,index与读指令中的index含义相同。本例中使用AT+CMGD=1来删除收到的短信息。
---- 注:所有的指令都以CHR(13)作为结束
PLC程序执行过程:
---- PLC在第一次扫描时执行初始化子程序,对端口及RCV指令进行初始化,并向M20发送AT+CMGF=1设置短信息格式为TEXT格式。初始化完成后,运行RCV指令使端口处于接受状态。
---- 当M20收到短信息时,会发送 +CMTI: \"SM\", 1 在PLC的接收完成中断中判断CMTI这四个字符来对M1.0进行置位,在主程序中通过该标志位调用ReadSMS子程序。
---- ReadSMS子程序中执行的操作为:复位子程序的触发条件(复位M1.0),置位M0.0,停止端口的接收,然后向M20发送AT+CMGR=1阅读收到的短信息。置位M0.0的目的是在发送完成中断中判断是哪个子程序执行了发送操作,从而重新对RCV指令进行设置,以接收Modem返回的信息(其他的子程序也采用了相同的做法:SendSM1的触发位为M1.1,子程序执行时置位M0.1;SendSM2的触发位为M1.2,子程序执行时置位M0.2;DelSM的触发位为M1.3,子程序执行时置位M0.3;ReSend的触发位为M1.4,子程序执行时置位M0.4)。Modem在接收到AT+CMGR=1后会将收到短信息的内容发送给PLC,信息的格式为:
---- +CMGR: \"REC UNREAD\",\"+8613801184286\",,\"02/03/05,13:44:12+32\"
---- CALL ME
---- OK
---- 其中\"CALL ME\"为短信息的实际内容,该信息转换为十六进制的形式为:
---- 0D 0A 2B 43 4D 47 52 3A 20 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 2B 38 36 31 33 38 30 31 31 38 34 32 38 36 22 2C 2C 22 30 32 2F 30 33 2F 30 35 2C 31 33 3A 34 34 3A 31 32 2B 33 32 22 0D 0A 43 41 4C 4C 20 4D 45 0D 0A 0D 0A 4F 4B 0D 0A
---- 这样,在发送完成中断中,以M0.0为条件,将RCV指令的接收的起始字符设置为空格符CHR(32)(十六进制的20)用以接受M20发送的短信息内容。在接收完成中断中,用接受缓冲的第一个字节等于CHR(32)来触发SendSMS1子程序。
---- SendSMS1子程序将从收到短信息的内容中提取出发送方的电话号码,并向M20发送AT+CMGS=\"发送方号码\",Modem在接到该指令后返回的信息为:
---- >
---- 对应的十六进制形式为:
---- 0D 0A 3E 20
---- 其中0D 0A为不可显示字符,20为空格符
---- 这样,在发送完成中断中以M0.1位条件设置接收的起始字符为\"〉\"CHR(62)用以接受M20发送的提示信息。在接收完成中断中,用接受缓冲的第一个字节等于CHR(62)来触发SendSMS2子程序。
---- SendSMS2子程序将所要发送的内容加上结束字符CHR(26)发送个给M20。如果短信息正确发送,M20返回 +CMGS: xxx(xxx为该SIM卡已发送的短信数量);如果信息未能正确发送,则M20返回 +CMS ERROR。在接收完成中断中,用CMGS来触发DelSMS子程序,用ERROR来触发ReSend子程序。
---- DelSMS子程序向M20发送AT+CMGD=1用来删除收到的短信息,ReSend子程序重新发送SendSMS1中的指令AT+CMGS=\" 发送方号码\"。
---- 点击下在原程序
---- 附:Modem发送的信息格式
---- 收到短信息时:
---- +CMTI: \"SM\", 1
---- 0D 0A 2B 43 4D 54 49 3A 20 22 53 4D 22 2C 20 31 0D 0A
---- 读取短信息内容时:
---- +CMGR: \"REC UNREAD\",\"+8613801184286\",,\"02/03/05,13:44:12+32\"
---- CALL ME
---- OK
---- 0D 0A 2B 43 4D 47 52 3A 20 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 2B 38 36 31 33 38 30 31 31 38 34 32 38 36 22 2C 2C 22 30 32 2F 30 33 2F 30 35 2C 31 33 3A 34 34 3A 31 32 2B 33 32 22 0D 0A 43 41 4C 4C 20 4D 45 0D 0A 0D 0A 4F 4B 0D 0A
---- 发送短信息时:
---- >
---- 0D 0A 3E 20
---- 发送成功时:
---- +CMGS: 160
---- OK
---- 0D 0A 2B 43 4D 47 53 3A 20 31 36 30 0D 0A 0D 0A 4F 4B 0D 0A
---- 发送失败时:
---- +CMS ERROR: 500


____________________________

关于金笛邮件短消息系统应用的更多介绍...
回复

使用道具 举报

 楼主| 发表于 2004-8-3 16:27:27 | 显示全部楼层
[quote:11f42ac284="Rayfox"]设置串口后就发AT指令
比如
int fd=open(....);
......//设置串口
char buf[4]={"at",0x0a,0x0d};
write(fd,buf,4);//写入AT
read(fd,buf....);//读取数据(如果串口设置正确就要返回OK)
//如果没有成功,就要看看你的设置是不是正确,你的串口的联线是不是正确?[/quote]大哥你在线吗?
你的QQ是多少!
你很了解这方面的东西!
我的QQ82945126
回复

使用道具 举报

发表于 2004-8-4 13:31:21 | 显示全部楼层
25065290同志不会是想发垃圾短信吧.........
回复

使用道具 举报

发表于 2004-8-9 22:24:08 | 显示全部楼层
不懂,頂一個

看帖回帖是美德
回复

使用道具 举报

发表于 2004-8-9 22:28:23 | 显示全部楼层
[quote:7e667e61b2="betatoy"]不懂,頂一個

看帖回帖是美德[/quote]
回复

使用道具 举报

发表于 2004-8-10 11:59:52 | 显示全部楼层
开发这个可能会使我国的短信诈骗疯狂增长哦...    
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 17:54 , Processed in 0.079280 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表