AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

控制远程计算机拨号上网并获取其IP地址

51自学网 2015-08-30 http://www.wanshiok.com

 

// 本 地 计 算 机 运 行 线 程 函 数 pp 功 能 代 码
void CallThread(void * pp )
{
  DWORD * dwId,dwLen, ret,ll;
  RASPPPIP rip;
  char szIp[50], *pdest;
  dwId=(DWORD *)pp;
  switch( * dwId )
  {
case IDC_CALL:
 // 通 知 远 程 计 算 机 登 录Internet
 ShowMsg(hWin,“Call remote... ");
 if ( StartCon( hWin,“connect",“",
 “d123",“9W7607714" ) == TRUE )
 {
  ShowMsg(hWin,“Remote Connected");
  // 取remote 分 配 的IP 地 址
  rip.dwSize=sizeof(RASPPPIP);
    if ( (ret=RasGetProjectionInfo(hCon,RASP_PppIp,
(LPVOID) &rip,(LPDWORD) &ll ) ) != 0 )
 ShowMsg(hWin,“ 取IP 地 址 失 败");
   else
   {
 ShowMsg(hWin,rip.szIpAddress);
 strcpy(szIp,rip.szIpAddress);
 pdest=strrchr(szIp,‘.');
  *pdest=‘/0';strcat(szIp,“.1");
 ShowMsg(hWin,szIp);
 SendCmd(szIp,“REQUEST");
   }
   RasHangUp(hCon);
}
else
   ShowMsg(hWin,“Call remote fail");
hCon=NULL;
 break;
case IDC_INTERNET:
// 本 地 计 算 机 登 录Internet
ShowMsg(hWin,“ 正 在 连 接 Internet... ");
StartCon( hWin,“internet",“local@pub2.fz.fj.cn",
  “aabb99",“9W163" );
break;
case IDC_ADDRESS:
// 读 取 远 程 计 算 机Internet IP 地 址
    ShowMsg(hWin,“ 正 在 取 IP 地 址...");
    if ( (dwLen=FtpWriteRead(“ftp.maoming.gd.cn",
    “abc.txt",40,cRemoteIP,1))>0 )
    {
     cRemoteIP[dwLen]=‘/0';ShowMsg(hWin,cRemoteIP);
     ShowMsg(hWin,“ 删 除IP 地 址 文 件..");
     MyFtpDeleteFile(“ftp.maoming.gd.cn",“abc.txt");
    }
    else
ShowMsg(hWin,“ 取IP 失 败");
    break;
 case IDC_RDISC:
// 通 知 远 程 计 算 机 断 开Internet 连 接
   ShowMsg(hWin,“ 正 在 向 远 端 发 Disconnect...");
   SendCmd(cRemoteIP,“DISCONNECT");
   break;
 }
 ThreadId=0;hThread=NULL;
 return;
}
// 远 程 计 算 机 运 行 线 程 函 数
void ServerThread(void * pp )
{
 RASPPPIP rip;
 DWORD ret,ll;
 SOCKADDR_IN acc_sin, dest_sin; // 地 址
 int acc_sin_len,status;
 char szMsg[ MY_MSG_LENGTH ];
 serv_sock = socket(AF_INET,SOCK_STREAM,0);
 dest_sin.sin_family=AF_INET;
 dest_sin.sin_addr.s_addr=INADDR_ANY;
 dest_sin.sin_port=htons(1023);
 bind(serv_sock,(struct sockaddr FAR *)
 &dest_sin,sizeof(dest_sin));
 listen(serv_sock,MAX_PENDING_CONNECTS);
 while( TRUE )
 {
acc_sin_len = sizeof(acc_sin);ShowMsg
(hWin,“ 等 待 呼 叫");
rsock = accept( serv_sock,(struct sockaddr FAR *)
&acc_sin,(int FAR *) &acc_sin_len );
  if (rsock < 0)
  {ShowMsg(hWin,“Accept Error!");break;}
   ShowMsg(hWin,“ 收 到 连 接 请 求!");
status = recv( rsock, szMsg, MY_MSG_LENGTH,
NO_FLAGS_SET );
  if (status == SOCKET_ERROR)
  {ShowMsg(hWin,“Recv Error!");break;}
  if (status)
  {
  szMsg[status] = ‘/0'; ShowMsg(hWin,szMsg);
  if ( strstr(szMsg,“REQUEST") != NULL )
  {
  isend(rsock,“OK",2,0);
closesocket(rsock);Sleep(3000);
// 等 待 拨 号 连 接 退 出
if (StartCon( hWin,“163",“remote@pub2.fz.fj.cn",
“abcd",“163" ) == TRUE )
  {
   // 取 动 态 分 配 的IP 地 址
   rip.dwSize=sizeof(RASPPPIP);
   if ( (ret=RasGetProjectionInfo(hCon,RASP_PppIp,
  (LPVOID) &rip,(LPDWORD) &ll ) ) != 0 )
   {ShowMsg(hWin,“ 取IP 地 址 失 败");break;}
   ShowMsg(hWin,rip.szIpAddress);ShowMsg(hWin,
  “ Send IP Adrress.... !");
   FtpWriteRead( “ftp.maoming.gd.cn",“abc.txt",
strlen(rip.szIpAddress),rip.szIpAddress,0);
   }
   else
   {ShowMsg(hWin,“Connect internet fail");}
   }//if ( strstr(szMsg,“REQUEST") != NULL )
   if ( strstr(szMsg,“DISCONNECT") != NULL )
   {
send(rsock,“OK",2,0);
closesocket(rsock);RasHangUp(hCon);
   } //end if ( strstr(szMsg,“DISCONNECT") != NULL )
  } //end if (status)
  else 
  {ShowMsg(hWin,“ 连 接 断 开! 等 待 下 一 个");
  closesocket(rsock);}
 } //end while( TRUE )
 if(hCon != NULL )
 {RasHangUp(hCon);Sleep(3000);}
 hCon =NULL;closesocket(serv_sock);hThread=NULL;
 return;
}
// 实 现 本 地 计 算 机 向 远 程 计 算 机
发 送 命 令 的 函 数 cIp 远 程 计 算 机
IP 地 址 SzCmd 命 令 字 符 串
BOOL SendCmd(char * cIp,char * szCmd)
{
  SOCKADDR_IN dest_sin; // 地 址
  int status;
  char szMsg[ MY_MSG_LENGTH ];
  rsock = socket(AF_INET,SOCK_STREAM,0);
dest_sin.sin_family=AF_INET;dest_sin.sin_
addr.s_addr = inet_addr(cIp);
  dest_sin.sin_port=htons(1023);
if (connect( rsock,(PSOCKADDR)
&dest_sin,sizeof(dest_sin) )<0 )
{ShowMsg(hWin,“ 连 接 失 败");
closesocket( rsock );return FALSE;}
  if ( send(rsock,szCmd,strlen(szCmd),0) != strlen(szCmd))
{ShowMsg(hWin,“ 送 命 令 失 败");
closesocket( rsock );return FALSE;}
status = recv( rsock, szMsg, MY_MSG
_LENGTH, NO_FLAGS_SET );
  if (status == SOCKET_ERROR)
{ShowMsg(hWin,“Recv Error!");
closesocket( rsock );return FALSE;}
  szMsg[status] = ‘/0'; 
  if ( status != 0 & & strstr(szMsg,“OK") != NULL )
  {closesocket( rsock );return TRUE;}
  closesocket( rsock );return FALSE;
}

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:用VC++实现Windows&nbsp;2000/XP下的休眠  下一篇:一个简易的图片浏览器