VS2010中这个error LNK2019: 无法解析的外部符号 怎么解决
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<WinSock.h>
#define SERVPORT 3333 //服务器监听端口
#define BACKLOG 10 //最大连接请求数
int main(void)
{
int sock_fd,client_fd;
// sock_fd:监听socket; client_fd:数据传输socket
struct sockaddr_in my_addr; //本机地址信息
struct sockaddr_in remote_addr; //客户端地址信息
char * msg = "you good\a\n";
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == 1 )
{
printf("socket 创建出错");
exit(1);
}
my_addr.sin_family = AF_INET; //各种数据的初始化
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(&(my_addr.sin_zero),0,8);
//绑定端口
if(bind(sock_fd, (struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
{
printf("bind 出错 ");
exit(1);
}
if(listen(sock_fd,BACKLOG) == -1)
{
printf("listen 出错");
exit(1);
}
while(1)
{
int sin_size = sizeof(struct sockaddr_in);
//接受用户连接
if((client_fd = accept(sock_fd,(struct sockaddr*)&remote_addr,&sin_size)) == -1)
{
printf("accept 出错");
continue;
}
//发送数据到客户端
if (send(client_fd,msg,strlen(msg),0) == -1)
{
printf("send 出错");
shutdown(client_fd,2);
exit(0);
}
shutdown (client_fd,2);
}
return 0;
}
/*
1>1.obj : error LNK2019: 无法解析的外部符号 _send@16,该符号在函数 _main 中被引用
1>1.obj : error LNK2019: 无法解析的外部符号 _accept@12,该符号在函数 _main 中被引用
1>1.obj : error LNK2019: 无法解析的外部符号 _listen@8,该符号在函数 _main 中被引用
1>1.obj : error LNK2019: 无法解析的外部符号 _bind@12,该符号在函数 _main 中被引用
1>1.obj : error LNK2019: 无法解析的外部符号 _htons@4,该符号在函数 _main 中被引用
1>1.obj : error LNK2019: 无法解析的外部符号 _socket@12,该符号在函数 _main 中被引用
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
1>E:\Visual Studio 2010\Project\网络1\Debug\网络1.exe : fatal error LNK1120: 7 个无法解析的外部命令
*/
[解决办法]
你没有初始化套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions later */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2
[解决办法]
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
[解决办法]
上网络程序设计课一般都用的这个
#include "initsock.h"
CInitSock initSock;// 初始化Winsock库
//////////////////////////////////////////////////////////
// initsock.h文件
#include <winsock2.h>
#pragma comment(lib, "WS2_32")// 链接到WS2_32.lib
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != 0)
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};