一个复杂的Windows下的套接字程序

  

上节演示了Linux下的套接字程序,这节来看一下Windows下的套接字程序。异样,服务器。cpp为效劳器端代码,客户为客户端代码。
效劳器端代码server.cpp:

  
 <代码> # include & lt; stdio.h># include & lt; winsock2.h># pragma评论(自由、“ws2_32.lib”)//加载ws2_32。dll int main(){//初始化dll WSADATA WSADATA;WSAStartup (MAKEWORD (2,2), wsaData);//创立套接字插座servSock=插座(PF_INET, SOCK_STREAM IPPROTO_TCP);//绑定套接字指向sockaddr_in sockAddr;memset(和sockAddr 0 sizeof (sockAddr));//每一个字节都用0填充sockAddr。sin_family=PF_INET;//运用IPv4地址sockAddr.sin_addr。s_addr=inet_addr (127.0.0.1);//详细的IP地址sockAddr。sin_port=htons (1234);//端口绑定(servSock (SOCKADDR *), SOCKADDR, sizeof (SOCKADDR));//进入监听形态听(servSock 20);//接纳客户端恳求SOCKADDR clntAddr;int nSize=sizeof (SOCKADDR);套接字clntSock=接受(servSock (SOCKADDR *), clntAddr,, nSize);//向客户端发送数据char * str=癏ello World !”;发送(clntSock, str, strlen (str) + sizeof (char), NULL);//封闭套接字closesocket (clntSock);closesocket (servSock);//终止DLL的运用WSACleanup ();返回0;} 
  

客户端代码client.cpp:

  
 <代码> # include & lt; stdio.h># include & lt; stdlib.h># include & lt; WinSock2.h># pragma评论(自由、“ws2_32.lib”)//加载ws2_32。dll int main(){//初始化dll WSADATA WSADATA;WSAStartup (MAKEWORD (2,2), wsaData);//创立套接字套袜子=插座(PF_INET, SOCK_STREAM IPPROTO_TCP);//向效劳器提议恳求指向sockaddr_in sockAddr;memset(和sockAddr 0 sizeof (sockAddr));//每一个字节都用0填充sockAddr。sin_family=PF_INET;sockAddr.sin_addr。s_addr=inet_addr (127.0.0.1);sockAddr。sin_port=htons (1234);连接(袜子,(SOCKADDR *), SOCKADDR, sizeof (SOCKADDR));//接纳效劳器传回的数据char szBuffer [MAXBYTE]={0};recv(袜子,szBuffer MAXBYTE, NULL);//输入接纳到的数据printf("服务器消息形式:% s \ n ", szBuffer);//封闭套接字closesocket(袜子);//终止运用DLL WSACleanup ();系统(“暂停”);返回0;} 
  

将服务器。cpp和客户端。cpp辨别编译为服务器。exe和客户端。exe,先运转服务器。exe,再运转客户端。exe,输入后果为:
服务器消息形式:Hello World !
Windows下的套接字程序和Linux思绪相反,但细节有所差异:
1) Windows下的套接字程序依附Winsock。dll或ws2_32。dll,必需提早加载. dll有两种加载方法,请检查:静态链接库dll的加载
2) Linux运用“文件描绘符”的概念,而Windows运用“文件句柄”的概念;Linux不辨别套接字文件和通俗文件,而Windows辨别;Linux下的套接字()函数的前往值为int类型,而Windows下为套接字类型,也就是句柄。
3) Linux下运用读()/写()函数读写,而Windows下运用recv()/()发送函数发送和接纳。
4)封闭套接字时,Linux运用关闭()函数,而Windows运用closesocket()函数。

一个复杂的Windows下的套接字程序