积极答复者
老师给的代码,结果运行出错了,关于socket

问题
-
#include<stdio.h>
#include<WinSock2.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err= WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"test %s",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100]={0};
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
while(1)
{
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
memset(sendBuf,0,sizeof(sendBuf));
strcat(sendBuf,"echo ");
strcat(sendBuf,recvBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
if(strcmp(recvBuf,"end")==0)
{
break;
}
}
closesocket(sockConn);
}
}1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(32): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> f:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(371) : 参见“sprintf”的声明
1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(42): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> f:\program files (x86)\microsoft visual studio 10.0\vc\include\string.h(110) : 参见“strcat”的声明
1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(43): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> f:\program files (x86)\microsoft visual studio 10.0\vc\include\string.h(110) : 参见“strcat”的声明
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__send@16,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__inet_ntoa@4,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__listen@8,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__bind@12,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__htonl@4,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _main 中被引用
1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _main 中被引用
1>c:\users\xu\documents\visual studio 2010\Projects\socket\Debug\socket.exe : fatal error LNK1120: 12 个无法解析的外部命令我当场吓出shi了
- 已移动 ChiYau 2012年4月14日 7:32 這個問題和C++有關..發在C++ Forum比較合適 (发件人:Visual Studio 2010)
- 已编辑 Legion Commander Duel 2012年4月14日 7:42 修改
答案
-
#pragma comment(lib, "WS2_32.lib")
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
- 已建议为答案 Helen Zhao 2012年4月18日 7:55
- 已标记为答案 Helen Zhao 2012年4月23日 2:14
-
金刚不坏你好!
我同意VisualEleven的观点,你应该添加依赖项Ws2_32.lib 。 你可以这样添加: #pragma comment(lib, "WS2_32.lib")。 也可以参考下面的方法:
1-]打开项目属性Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加 Ws2_32.lib。
2-] 打开项目属性Configuration Properties->Linker->General->"Additional Library Directories",在这里添加Ws2_32.lib文件的路径。
祝你好运!
Helen Zhao [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 Helen Zhao 2012年4月18日 7:55
- 已标记为答案 Helen Zhao 2012年4月23日 2:14
全部回复
-
#pragma comment(lib, "WS2_32.lib")
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
- 已建议为答案 Helen Zhao 2012年4月18日 7:55
- 已标记为答案 Helen Zhao 2012年4月23日 2:14
-
金刚不坏你好!
我同意VisualEleven的观点,你应该添加依赖项Ws2_32.lib 。 你可以这样添加: #pragma comment(lib, "WS2_32.lib")。 也可以参考下面的方法:
1-]打开项目属性Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加 Ws2_32.lib。
2-] 打开项目属性Configuration Properties->Linker->General->"Additional Library Directories",在这里添加Ws2_32.lib文件的路径。
祝你好运!
Helen Zhao [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 Helen Zhao 2012年4月18日 7:55
- 已标记为答案 Helen Zhao 2012年4月23日 2:14