RasDial 拨号
RasHangUp 挂断

解决方案 »

  1.   

    1、对于被叫方启动一个侦听服务:
    m_hServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(m_hServerSocket==INVALID_SOCKET)
    {
    AfxMessageBox("创建服务socket失败,检查TCP/IP网络配置");
    return false;
    }
    int err;
    SOCKADDR_IN addr;
    CString strErrMsg;
    memset(&addr,0,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(5500);
    addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(m_hServerSocket,(SOCKADDR*)&addr,sizeof(addr)))
    {
    err = WSAGetLastError ();
    strErrMsg="绑定TCP/IP协议出错,错误原因可能是侦听端口被占用了,请检查TCP/IP设置!";
    MessageBox(strErrMsg);
    return FALSE;
    }
    else
    {
    if(listen(m_hServerSocket,SOMAXCONN))
    {
    err  = GetLastError();
    strErrMsg.Format("在端口%d侦听失败,失败原因为:%s,请试试其他端口建议端口号范围为5500到65500之间!",g_dwListenPort,GetErrorMessage(err));
    MessageBox(strErrMsg);
    return FALSE;
    }
    } if(WSAAsyncSelect(m_hServerSocket,m_hWnd,WM_SOCKET_MESSAGE,FD_ACCEPT|FD_CLOSE)!=0)
    return false;
    return true;在后面定义消息WM_SOCKET_MESSAGE的响应函数,如果有连接请求则会发这个消息!
    2、客户端的拨号程序为
    BOOL AutoDial(long nID,HRASCONN& hConnect)
    {
    //自动拨号
    COCIRecord rec(&g_db);
    rec.m_strSql.Format("select dialername,dialerusername,dialerpassword,\
    dialerdomain from dc2_node where nodeid=%d",nID);
    if(!rec.Open())
    {
    AfxMessageBox("CMainFrame::AutoDial:1526"+rec.GetErrorMessage());
    return false;
    }
    rec.MoveNext();
    if(rec.GetCurrentRowCount()==0)return false;
    CString strDialerName = rec.GetItemBuffer(0,"dialername");
    CString strDialerUserName = rec.GetItemBuffer(0,"dialerusername");
    CString strDialerPassword = rec.GetItemBuffer(0,"dialerpassword");
    CString strDialerDomain = rec.GetItemBuffer(0,"dialerdomain"); RASDIALPARAMS param;
    memset(&param,0,sizeof(param));
    param.dwSize = sizeof(param);
    strcpy(param.szEntryName,strDialerName);
    strcpy(param.szUserName,strDialerUserName);
    strcpy(param.szPassword,strDialerPassword);
    strcpy(param.szDomain,strDialerDomain); hConnect=0;
    m_dblDialStart = TimeToDouble(CTime::GetCurrentTime());
    DWORD ret=RasDial(NULL,NULL,&param,0,RasDialFunc,&hConnect);
    BOOL bRet = ret == 0 ;
    if(!bRet)
    {
    m_pwndStatusTab->SetErrorMessage((char *)(LPCTSTR)("拨号失败:"+GetRasError(ret)));
    RasHangUp(hConnect);
    return false;
    }
    m_nRasStatus = RAS_CONNECTING;
    return true;
    }
    对于以后的事情就应该知道了吧!
      

  2.   

    多谢wuchunzhong:
        那么自动传送文件呢?    
    你这是用SOCKET实现的是吗?如果用ZMODEM,或者TAPI应该怎么实现?
      

  3.   

    据我所知,ZMODEM协议曾经是进行文件传输的最流行的协议。有谁知道有关ZMODEM的实现方法吗?