程序编译没有错误和警告,程序代码如下: WSADATA wsaData;
char name[255];
CString ip;
PHOSTENT hostinfo;
memset(name,0,sizeof name);
if (WSAStartup (MAKEWORD(1,1), &wsaData) != 0) 
{

if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}

WSACleanup( );

AfxMessageBox(name);//name里是本机名
AfxMessageBox(ip); //ip中是本机IP两个AfxMessageBox打印出来都是空值,奇怪。怎么解决,谢谢大家!

解决方案 »

  1.   

    WSAGetLastError看错误代码
    if(gethostname(name, sizeof(name)) == SOCKET_ERROR)
       
         
      

  2.   

    if (WSAStartup (MAKEWORD(1,1), &wsaData) == 0)
      

  3.   

    C++ Builder下的代码//---------------------------------------------------------------------------#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 __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::FormClose(TObject *Sender, TCloseAction &Action)
    {
        WSACleanup();}
    //---------------------------------------------------------------------------
      

  4.   

    请注意WSAStartup这个函数的返回值,如果成功返回0。
    if (WSAStartup (MAKEWORD(1,1), &wsaData) == 0) 就好了。
      

  5.   

    真是粗心呀,cnsdwfwy(情报工作者)说的对呀。散分