关于vs2008上的socket链接错误问题
生活随笔
收集整理的這篇文章主要介紹了
关于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链接错误问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Socket编程步骤
- 下一篇: Linux下python升级步骤