一个关于取本机名和IP的程序(20分)

  • 主题发起人 主题发起人 小胖0
  • 开始时间 开始时间

小胖0

Unregistered / Unconfirmed
GUEST, unregistred user!
void __fastcall TForm1::Button3Click(TObject *Sender)
{
hostent *p;
char *s;
int i=0;
char *p2;
i=gethostname(s, 128);//获取指定计算机的名字 ?此行错误(返回值错误)为什么?会不会是因为我用的是XP;
p = gethostbyname(s);
Memo1->Lines->Add(p->h_name);
p2 = inet_ntoa(*((in_addr *)p->h_addr));
//获取指定计算机的IP地址
Memo1->Lines->Add(p2);
Edit8->Text=*s;
Edit8->Text=IntToStr(i);
Edit9->Text=p2;
}
编译通过,但没有正确的结果,请大家帮忙解释一下
要是有错,请告诉我哪儿错了,为什么错了,谢谢。小弟初学有什么不当请原谅
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
hostent *p;
char *s;
int i=0;
char *p2;
new(s) ;
//我觉得用到指针的地方都要先给它分配内存
i=gethostname(s, 128);//获取指定计算机的名字 ?此行错误(返回值错误)为什么?会不会是因为我用的是XP;
p = gethostbyname(s);
Memo1->Lines->Add(p->h_name);
p2 = inet_ntoa(*((in_addr *)p->h_addr));
//获取指定计算机的IP地址
Memo1->Lines->Add(p2);
Edit8->Text=*s;
Edit8->Text=IntToStr(i);
Edit9->Text=p2;
}
 
var
wVersionRequested: WORD;
wsaData: TWSAData;
P: PHostEnt;
S: array[0..128] of char;
p2: PChar;
begin
{创建 WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
{得到计算机名称}
GetHostName(@s,128);
p := GetHostByName(@s);
Edit1.Text := p^.h_Name;
{得到机器IP地址}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Edit2.Text := p2;
{释放 WinSock}
WSACleanup;
end;
 
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
char ComputerName[255];
DWORD size=255;
if (!GetComputerName(ComputerName,&size))
{
MessageBox(Handle,"失败" ,"错误",MB_OK|MB_ICONERROR);
exit(0);
}
Edit1->Text=ComputerName;
}
//---------------------------------------------------------------------------
 
http://www.chinabcb.com/bbs/
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
hostent *p;

char s[128];//定义字符串数组
char *p2;


//Get the computer name
gethostname(s,128);

p = gethostbyname(s);

Memo1->Lines->Add(p->h_name);

//Get the IpAddress
p2 = inet_ntoa(*((in_addr *)p->h_addr));

Memo1->Lines->Add(p2);

}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WORD wVersionRequested;

WSADATA wsaData;

//Start up WinSock
wVersionRequested = MAKEWORD(1, 1);

WSAStartup(wVersionRequested, &wsaData);

}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
WSACleanup();

}
你编译式式~~~没有问题的`
 
兄弟:你有两个错误:
1。 gethostname();
A successful WSAStartup must occur before using this function.
2. cahr *s 因该分配内存。
改动:
1。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = (WORD) ((BYTE)2);
if (WSAStartup( wVersionRequested, &wsaData ) != 0 ) {
MessageBox(Application->Handle, "不能发现可用的 Winsock DLL!", "error", MB_ICONERROR);
Application->Terminate();
};
}
2。 char *s ;
s= (char *) malloc(128);
...............
free(str);
 
后退
顶部