两个问题要求用API实现,不能用到BCB中的控件或都VC的类库!!!

SSTS 2001-10-14 08:15:48
(1)怎么检测是否已经连上网,,不要用查或都注册表的方法!
(2)怎么发送EMAIL(不要告诉我用FOXMAIL)

以上问题只能用API实现。。。

如果分数不够我可以再加一百分,,,,,
如果没人能答对,这个贴子只能让他烂掉!
以上问题最好能给我一个DEMO!
...全文
101 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
三杯倒 2001-10-15
  • 打赏
  • 举报
回复
gz
pitchstar 2001-10-15
  • 打赏
  • 举报
回复
发 email 可以用 socket 函数写连接过程,但要做一定的编码处理
需要处理 2 个技术问题:
1、和服务器交互,想 mailto rcpt data ....
2、邮件编码
第一个问题,如果不愿看 rfc,可以如下解决:
win2000 自带网络管理器,可以监视你收发邮件的过程,然后看看
他的过程,自己用 socket 写这个过程。

第二个问题可以这样:
在 outlook 里保存一个 mail 生成一个 .eml 文件,把这个文件用写
字板或记事本打开,仔细研究吧,其中具体内容用到 base64 编码,他的例
程到处都是,

可以去 http://gtth.vip.myrice.com/ 有个 gwebmail ,里边有发邮件
的程序
a813 2001-10-15
  • 打赏
  • 举报
回复
1.可以使用SOCKET ,CONNECT 一个固定ip和port,失败说明未上网
2.可见http://www.csdn.net/expert/topic/320/320151.shtm
mychome 2001-10-15
  • 打赏
  • 举报
回复
xx
SSTS 2001-10-15
  • 打赏
  • 举报
回复
你们是不是担心我不给分啊!!
放心我不会。
但如果没人能答出来,这个贴子只有烂掉啦!
SSTS 2001-10-15
  • 打赏
  • 举报
回复
都过了一天啦,,怎么就没人能回答呢!!
是高手都瞧不起呢,还是CSDN无高手呢。。。。。。
heavyrain1234 2001-10-14
  • 打赏
  • 举报
回复
attend
nzinfo 2001-10-14
  • 打赏
  • 举报
回复
可以先ping一下
SSTS 2001-10-14
  • 打赏
  • 举报
回复
这个函数不能成功我试过啦!
就算连上网也检测不到!

to :dycdyc123(微笑江湖)
不要用控件。。。。。。
检测IP的方法在局域网里行不通的。。。
这个方法以前的贴子有!!
happy243 2001-10-14
  • 打赏
  • 举报
回复
#include <wininet.hpp>

(1) InternetGetConnectedState
(2) ShellExecute
dycdyc123 2001-10-14
  • 打赏
  • 举报
回复
1:
HOSTENT *lpHostEnt=gethostbyname(HostName);
for (int i=0; lpHostEnt->h_addr_list[i]!=NULL; i++)
{
IN_ADDR *p=(IN_ADDR *)(lpHostEnt->h_addr_list[i]);
String IP=inet_ntoa(*p);
Label2->Caption=IP;
}

获得本机的IP地址,用不着API,用PowerSock控件就可以了。
AnsiString sIP = PowerSock1->LocalIP;

这个函数可以取得你机器上的所有网络设备的IP地址,
void GetNetAddress ( TStringList * IPList ) // 网络地址, 本机IP地址
{
char HostName[80];
LPHOSTENT lpHostEnt;
struct in_addr addr[16];
//本程序假设主机不是多宿主机,即最多只有
// 一块网卡和一个动态IP
for ( int I = 0; I < 16; I ++ )
{
memset ( & addr[I], 0, sizeof ( in_addr ) ) ;
//对in_addr结构清0,以利后面填写
}
if ( gethostname ( HostName, sizeof ( HostName ) ) == SOCKET_ERROR )
{
return;
}
lpHostEnt = gethostbyname ( HostName ) ; //利用得到的主机名去获得主机结构
if ( ! lpHostEnt )
{
return ;
}
for ( int I = 0; lpHostEnt->h_addr_list[I] != 0; I ++ )
//从主机地址表中得到IP地址
{
memcpy ( & addr[I], lpHostEnt->h_addr_list[I], sizeof ( in_addr ) ) ;
}
AnsiString Temp;
for ( int i=0;i<16;i++ )
{
Temp = inet_ntoa ( addr[i] ) ;
if ( Temp != "" && Temp != "0.0.0.0" )
IPList->Add(Temp);
}
}


\\-----------------------------------------


#include <WINSOCK2.H>
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::GetHostIpAddress()
{
struct hostent *thisHost;
struct in_addr in;
char MyName[80];
char *ptr,*hostname;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(2,0);

err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
return;
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0)
{
WSACleanup();
return;
}
if(gethostname(MyName,80)==SOCKET_ERROR)
return;
if(!(thisHost=gethostbyname(MyName)))
return;
hostname=thisHost->h_name;
memset((void*)&in,sizeof(in),0);
in.s_addr=*((unsigned long *)thisHost->h_addr_list[0]);
if(!(ptr=inet_ntoa(in)))
return;
WSACleanup();
Edit1->Text=AnsiString(ptr);
Edit2->Text=AnsiString(hostname);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
GetHostIpAddress();
}




使用 NetMasters Powersock 控件读取本地IP 地址,如果是"0.0.0.0" 说明没有连接。
例子:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Powersock1->LocalIP == "0.0.0.0")
ShowMessage("not connected"); //本人机子上拔掉网线时仍是显示!
else
ShowMessage(Powersock1->LocalIP);
}


2: I don't know!
SSTS 2001-10-14
  • 打赏
  • 举报
回复
大家看看啊,,
怎么我每次提问,总是没人理!

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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