Windows Sockets提供了Windows环境下的、简化了的网络编程方法,应用程序将待发送的数据交给socket,再由socket交给网络驱动程序,最后由网络驱动程序把数据发送到网络中去。
我编写了一个基于TCP的、服务器端的网络通信应用程序,代码如下:
#include <Winsock2.h>
#include <stdio.h>
void main(){
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1,1);
int err = WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
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,"welcome %s to http://www.sunxin.org",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s/n",recvBuf);
closesocket(sockConn);
}
}
上面的代码遵循一般的网络编程步骤:
1.加载套接字库;
2.创建套接字;
3.绑定套接字;
4.将套接字设定为监听模式;
5.利用死循环,使服务器端应用程序处于一直运转的状态,时刻监听来自客户端的连接请求,在建立连接后进行数据通信。
问题是,本程序使用了WinSock库中的函数,按照动态链接库的使用方法,需要为程序链接相应的.lib文件。在这里,需要为程序链接ws2_32.lib文件。在VS2008中链接相应库文件的方法如下:
依次点击:Project->Project Properties->Linker->Input,在Additional Dependencies中,输入ws2_32.lib。这样就把为程序链接了相应的.lib文件。
如果不链接相应的库文件,那么编译时会出现ERROR LNK2019: unresolved external symbol.