關於vs2008上的socket鏈接錯誤問題

昨天想用socket做一個簡單的windows程序, 先拿來了以前在vc6.0上做的一小段代碼, 竟然發現在vs2008上不能運行.出現了好多鏈接錯誤, 研究了好半天也沒有發現是怎麼回事.>下來是代碼和 錯誤信息.
正在鏈接...>
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__closesocket@4,該符號在函數 _main 中被引用1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__inet_ntoa@4,該符號在函數 _main 中被引用1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__sendto@24,該符號在函數 _main 中被引用1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__recvfrom@24,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__bind@12,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__htons@4,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__htonl@4,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__socket@12,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__WSACleanup@0,該符號在函數 _main 中被引用
1>tem.obj : error LNK2019: 無法解析的外部符號 __imp__WSAStartup@8,該符號在函數 _main 中被引用
1>d:\My Documents\Visual Studio 2008\Projects\tem\Debug\tem.exe : fatal error LNK1120: 10 個無法解析的外部命令

代碼是:


#include<Winsock2.h>
#include<stdio.h>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
                         
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 1;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(4546);

bind(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr));
char recvBuf[100];
char sendBuf[100];
char temBuf[200];
sockaddr_in addrClient;
int len=sizeof(sockaddr);
while(1){
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR *)&addrClient,&len);
if('q'==recvBuf[0]){
sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR *)&addrClient,len);
printf("Chat end!\n");
break;

}
sprintf(temBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),recvBuf);
printf("%s\n",temBuf);
printf("Please input data:\n");
gets(sendBuf);
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR *)&addrClient,len);
}
closesocket(sockSrv);
WSACleanup();

}

編譯沒有問題的, 主要是鏈接上的錯誤,所以就去查msdn。第一次竟然沒有發現是哪的錯,後在csdn上search了一下後才發現好像是在08上寫socket要加上新的鏈接庫  Ws2_32.lib.再查msdn,要求如下:
Header   Declared in Winsock2.h.

Library   Use Ws2_32.lib.

DLL        Requires Ws2_32.dll.

加上後果然成功了。



在新的08上要加入鏈接庫 方法:項目>屬性->配置屬性->鏈接器->輸入 :附加依賴項 中加入要鏈接的庫即可。

關於vs2008上的socket鏈接錯誤問題 - strive_on<wbr>ly - 奮鬥,我要一直奮鬥...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章