通讯的问题:有电话打入时取得电话号码。

JQinHan 2005-04-24 05:29:05
用moden把电话线和电脑串口连起来,程序监控串口,当有电话打进来时,能不能得到打入的电话号码?能得到有什么要求?应该怎么做?

如果moden不行,那有什么设备可以完成这个功能?


解决了要多少分都行。我有二个ID,这个只有三百分,另一个有二千多分
...全文
231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
touhu 2005-06-25
  • 打赏
  • 举报
回复
来电显示用MODEM!我做过,呵呵,现在还在用呢!
用AT#CID或AT+VCID命令。
自己用超级终端试试就知了。
线路一样得开通来电显示才行!
「已注销」 2005-06-06
  • 打赏
  • 举报
回复
mark
CWYCN 2005-04-27
  • 打赏
  • 举报
回复
学习
mli0080 2005-04-25
  • 打赏
  • 举报
回复
不开通来电显示你怎么从电信局得到对方的号码呢?
Behard 2005-04-25
  • 打赏
  • 举报
回复
肯定需要开通来电显示的
Behard 2005-04-25
  • 打赏
  • 举报
回复
电话号码跟在 Ring 命令后面
bluesen 2005-04-25
  • 打赏
  • 举报
回复
线路必须申请开通来电显示。据我所知,各地的电信送主叫的模式是不同的,有FSK和DTMF两种模式,这两种模式我都遇到过。

如果Modem不行,就买个语音卡,语音卡可以轻易支持多路,而且相对稳定,也可以适应多种主叫发送模式。

我的免费语音平台,既可以支持语音Modem,也支持多种语音板卡,代码是完全一样的:
http://www.bluespace.com.cn/koodoo

不妨看看,也可以到网站上的留言簿上探讨。
wakala 2005-04-25
  • 打赏
  • 举报
回复
学习
JQinHan 2005-04-24
  • 打赏
  • 举报
回复
看了下程序,不是很明白,应该就是一个函数,在不停地监视moden所连的端口,一有电话打入则能得到电话号码。

是不是这样?
JQinHan 2005-04-24
  • 打赏
  • 举报
回复
刚睡了会。

我试一下,谢谢了。

这个要不要开通电话的来电显示?
Behard 2005-04-24
  • 打赏
  • 举报
回复
bufferOK 是在中断接收函数控制
收到 '\r' 即可置为 true
Behard 2005-04-24
  • 打赏
  • 举报
回复
直接使用 AT 命令的方式控制
我以前写的 DOS 下控制 Modem 的程序
void comm_putc ( unsigned char c ) /* sends char out port */
{
while ( ( inportb ( stat8250 ) & 0x20 ) == 0 ) ;
/* Wait til transmitter is ready then send it */
outportb ( dat8250 , c );
// outportb ( 0x3f8 , c ) ; // COM1=0x2F8 COM2=0x3F8
}

void SendCommand ( char *cmdline )
{
unsigned char send_character ;

for ( ; ( send_character = *cmdline ) != '\0' ; cmdline++ )
comm_putc ( send_character ) ;
return ;
}

long ReadTime( void ) // 获取时间
{
union REGS r;
long milliseconds;

r.h.ah = 0x2c;
int86( 0x21, &r, &r );
milliseconds = (long) r.h.dl * 10; // dl : hundredths
milliseconds += (long) r.h.dh * 1000; // dh : seconds
milliseconds += (long) r.h.cl * 60000L; // cl : minutes
milliseconds += (long) r.h.ch * 3600000L; // ch : hours
return( milliseconds );
}

int Initialize ( void ) // 初始化
{
long timeout ;
char *rece_temp ;

timeout = ReadTime () + 2000L ;

comm_putc ( 'A' ) ;
comm_putc ( 'T' ) ;
comm_putc ( '\r' ) ;

while ( ReadTime () < timeout )
{
if ( bufferOK )
{
bufferOK = 0 ;
if ( ( rece_temp = strstr ( inter_buffer, "OK" )) != 0 )
{
// printf ( "Initialize is OK!\n" ) ;
return 1 ;
}
}
}
// printf ( "Initialize is Failed!\n" ) ;
return 0 ;
}

int Dial ( void ) // 拨号
{
long timeout = ReadTime () + 60000L ;
char *rece_temp ;

inter_no = read_no = 0 ;
comm_putc ( 'A' ) ; //Can use SendCommand()
comm_putc ( 'T' ) ;
comm_putc ( 'D' ) ;
comm_putc ( 'T' ) ;
SendCommand ( "12345678" ) ; // 电话号码
comm_putc ( '\r' ) ;

while ( ReadTime () < timeout )
{
if ( bufferOK )
{
bufferOK = 0 ;
if ( ( rece_temp = strstr ( inter_buffer, "CONNECT" )) != 0 )
{
// printf ( "%s\n" , rece_temp ) ;
return 1 ;
}
if ( ( rece_temp = strstr ( inter_buffer, "NO CARRIER" )) != 0 )
{
// printf ( "No Carrier!\n" ) ;
return 0 ;
}
}
}
return 0 ;
}

int Answer ( void ) // 应答
{
long timeout = ReadTime () + 60000L ;
char *rece_temp ;

inter_no = read_no = 0 ;
comm_putc ( 'A' ) ;
comm_putc ( 'T' ) ;
comm_putc ( 'A' ) ;
comm_putc ( '\r' ) ;

while ( ReadTime () < timeout )
{
if ( bufferOK )
{
bufferOK = 0 ;
if ( ( rece_temp = strstr ( inter_buffer, "CONNECT" )) != 0 )
{
// printf ( "%s\n" , inter_buffer ) ;
return 1 ;
}
if ( ( rece_temp = strstr ( inter_buffer, "NO CARRIER" )) != 0 )
{
// printf ( "No Carrier!\n" ) ;
return 0 ;
}
}
}
return 0 ;
}

int Ring ( void ) // 响铃
{
char *rece_temp ;

if ( bufferOK )
{
bufferOK = 0 ;
if ( ( rece_temp = strstr ( inter_buffer, "RING" )) != 0 )
{
// printf ( "%s\n" , inter_buffer ) ;
return 1 ;
}
}
else
return 0 ;
}

int Hangup ( void ) // 挂机
{
long timeout = ReadTime () + 1250 ;
char *rece_temp ;

while ( ReadTime() < timeout )
;
SendCommand ( "+++" ) ;

timeout = ReadTime() + 1250 ;

while ( ReadTime() < timeout )
;
timeout = ReadTime() + 10000L ;
SendCommand ( "ATH0\r" ) ;

while ( ReadTime () < timeout )
{
if ( bufferOK )
{
bufferOK = 0 ;
if ( ( rece_temp = strstr ( inter_buffer , "OK" )) != 0 )
{
// printf ( "Hang is OK!\n" ) ;
return 1 ;
}
}
}

return 0 ;
}
Behard 2005-04-24
  • 打赏
  • 举报
回复
你直接使用 AT 命令还是 微软的 API?
如果是 AT 命令的话,会返回 RING 命令带电话号码的
不过这需要你的电话网络支持
JQinHan 2005-04-24
  • 打赏
  • 举报
回复
在线等候中……

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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