WIN2000系统,VC6SP6平台,一个TCP服务端的代码,运行提示出错:LIBCD.lib(wincrt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16 
请高手帮忙修改,谢谢! 
TCPServer.cpp文件 
#include   "../common/InitSock.h" 
#include   <stdio.h> 
CInitSock   initSock; //   初始化Winsock库 
int   main() 

//   创建套节字 
SOCKET   sListen   =   ::socket(AF_INET,   SOCK_STREAM,   IPPROTO_TCP); 
if(sListen   ==   INVALID_SOCKET) 

printf("Failed   socket()   \n"); 
return   0; 
} //   填充sockaddr_in结构 
sockaddr_in   sin; 
sin.sin_family   =   AF_INET; 
sin.sin_port   =   htons(4567); 
sin.sin_addr.S_un.S_addr   =   INADDR_ANY; //   绑定这个套节字到一个本地地址 
if(::bind(sListen,   (LPSOCKADDR)&sin,   sizeof(sin))   ==   SOCKET_ERROR) 

printf("Failed   bind()   \n"); 
return   0; 
} //   进入监听模式 
if(::listen(sListen,   2)   ==   SOCKET_ERROR) 

printf("Failed   listen()   \n"); 
return   0; 
} //   循环接受客户的连接请求 
sockaddr_in   remoteAddr;   
int   nAddrLen   =   sizeof(remoteAddr); 
SOCKET   sClient; 
char   szText[]   =   "   TCP   Server   Demo!   \r\n"; 
while(TRUE) 

//   接受一个新连接 
sClient   =   ::accept(sListen,   (SOCKADDR*)&remoteAddr,   &nAddrLen); 
if(sClient   ==   INVALID_SOCKET) 

printf("Failed   accept()"); 
continue; 
} printf("   接受到一个连接:%s   \r\n",   inet_ntoa(remoteAddr.sin_addr)); //   向客户端发送数据 
::send(sClient,   szText,   strlen(szText),   0); 
//   关闭同客户端的连接 
::closesocket(sClient); 
} //   关闭监听套节字 
::closesocket(sListen); return   0; 
}
InitSock.h的代码: 
#include   <winsock2.h> 
#pragma   comment(lib,"WS2_32") 
class   CInitSock 

public: 
CInitSock(BYTE   minorVer=2,BYTE   majorVer=2) 

WSADATA   wsaData; 
WORD   sockVersion=MAKEWORD(minorVer,majorVer); 
if(::WSAStartup(sockVersion,&wsaData)!=0) 
{exit(0);} 

~CInitSock() 
{::WSACleanup();} 
};

解决方案 »

  1.   

    #pragma comment(lib,"Ws2_32.lib") 试试
      

  2.   

    网上搜索的,测试正确  vc中error LNK2001:unresolved external symbol _WinMain@16的解决方法 
     
      
    一,问题描述
    error LNK2001: unresolved external symbol _WinMain@16
    debug/main.exe:fatal error LNK 1120:1 unresolved externals 
    error executing link.exe;二,产生这个问题可能的原因
    1, 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.2.  你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。三, 解决方法
    1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.3.保存设置,Rebuild All.
     
      

  3.   

    没有解决,我的入口函数是main();project-> setting-> Link中的subsystem:windows
      

  4.   

    问题已解决,新建项目win32 Console Application使用上述代码执行正确,但是大家可以给我解释一下是什么原因吗?
      

  5.   

    楼上脑子转的慢啊,如果你的入口函数是main ,把我说的设置反过来就行了
      

  6.   

     大哥啊,我就是改成subsystem:console也没有用,还是重建立才行的
      

  7.   

    console窗口 和win32窗口的设置不一样。console的入口函数是main,win32的入口函数是winmain()。就是这样。