- 论坛徽章:
- 0
|
下面接着来看看在C++ Builder 下如何实现,其实两者的思想是一样的,只是在C++ Builder下实现的界面友好点而已,实现方法:打开C++ Builder 5,默认情况下已经新建一个工程,保存这个工程文件就可以了,在相应之处添入下面的代码即可。 \r\n\r\n程序代码: \r\n\r\n\r\n//包含头文件 \r\n#include \r\n#include \r\n#pragma hdrstop \r\n#include \"Unit1.h\" \r\n#pragma package(smart_init) \r\n#pragma resource \"*.dfm\" \r\nTForm1 *Form1; \r\n__fastcall TForm1::TForm1(TComponent* Owner) \r\n: TForm(Owner) \r\n{ } \r\nvoid TForm1::GetHostIpAddress() \r\n{// GetHostIpAddress()获得本机IP地址 \r\nstruct hostent *thisHost; \r\nstruct in_addr in; \r\nchar MyName[80]; \r\nchar *ptr; \r\nWORD wVersionRequested; \r\nWSADATA wsaData; \r\nint err; \r\nwVersionRequested = MAKEWORD( 2, 0 ); \r\nerr = WSAStartup( wVersionRequested, &wsaData ); \r\nif( err != 0 ) \r\nreturn; \r\nif(LOBYTE( wsaData.wVersion ) != 2 || \r\nHIBYTE( wsaData.wVersion ) != 0 ) \r\n{ WSACleanup( ); \r\nreturn; } \r\nif(gethostname(MyName,80)==SOCKET_ERROR) \r\nreturn; \r\nif(!(thisHost=gethostbyname(MyName))) \r\nreturn; \r\nmemset((void *)&in,sizeof(in),0); \r\nin.s_addr=*((unsigned long *)thisHost-〉h_addr_list[0]); \r\nif(!(ptr=inet_ntoa(in))) \r\nreturn; \r\nWSACleanup( ); \r\nEdit1-〉Text=AnsiString(ptr);} \r\nvoid __fastcall TForm1::FormCreate(TObject *Sender) \r\n{ GetHostIpAddress();} \r\nvoid __fastcall TForm1::Button1Click(TObject *Sender) \r\n\r\n \r\n\r\n\r\n 程序在 C++ Builder 5 下编译通过。通过比较你会发现他们是大同小异的,对于同一程序,两者工具各有秋千,至于选择哪种由你决定,最好是两者相得益彰。 |
|