刚学网络编程,搞不懂这个问题。还有,是不是16位的程序(主函数是main()的那种)就不能用winsock了,那么应该用什么呢?刚学有很多不懂的地方,以后请大家多多关照。

解决方案 »

  1.   

    还有,是不是16位的程序(主函数是main()的那种)就不能用winsock了,那么应该用什么呢?主函数是main()的那种不一定是16位的,控制台应用就是这样。
    winsock.h,winsock2.h 是SDK用的头文件,afxsock.h应该是MFC的吧。
    在控制台应用下是可以用这些头文件的,和窗口应用没多大区别。
      

  2.   

    那么这个程序:#include <iostream.h>
    #include <winsock.h>void getIP();int main()
    {
    getIP(); return 0;
    }void getIP()
    {
    char hostname[128];

    if(gethostname(hostname,128)==0)
    {
    hostent *phost;
    phost=gethostbyname(hostname);
    cout<<hostname<<endl;
    for(int j=0;j<4;j++)
    {
    if(j>0)
    cout<<".";
    cout<<phost->h_addr_list[0][j];
    }
    cout<<endl;
    }
    }为什么显示如下错误:Compiling...
    getIP.cpp
    Linking...
    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/getIP.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
      

  3.   

    代码没有问题,你创建的是Win32应用吧,应该用控制台来做。
      

  4.   

    同一楼上,可能建立的是windows应用程序,可写为控制台程序。在16位也可以用,用socket直接创建就可以了,建议看看Stevens的书,虽然是Unix下的,但在windows下也可以编译成功
      

  5.   

    谢谢各位大虾,我换成console app就通过编译了。
    不过gethostname(hostname,128)==0这个语句总是为false,不知道为什么?
      

  6.   

    #include <iostream.h>
    #include <winsock2.h>#pragma comment(lib,"WS2_32.lib")这样应该就可以了
      

  7.   

    这人函数估计要先WSAStartup才行吧。
      

  8.   

    gethostname(hostname,128)==0这个语句总是为false的原因找到了,需要添加下列语句:WSADATA wsadata;
    WSAStartup(MAKEWORD( 1, 1 ), &wsadata );以及
    WSACleanup();谢谢热心人