mfc编程基础,mfc编程技巧与范例详解

  mfc编程基础,mfc编程技巧与范例详解

  基于三氯苯酚的窝编程

  /*

  服务器端程序流程:

  1.加载套接字库WSAStartup

  2.创建套接字窝

  3.将我们创建的套接字,绑定到本机地址的某一端口上约束

  4.为套接字设置监听模式,准备客户请求听

  5.等待客户请求到来。当请求到来,将接受连接请求,并返回一个新的对应于此次连接的套接字接受

  6.用新返回的套接字和客户端进行通信发送/接收

  7.在通信结束后,关闭套接字封闭插座

  客户端程序流程:

  1.加载套接字库WSAStartup

  2.创建套接字窝

  3.向服务器发出请求连接连接

  4.和服务器进行通信发送/接收

  5.在通信结束后,关闭套接字封闭插座

  */

  【cpp】查看plaincopyprint?

  #包括Winsock 2。h #包含stdio。h # pragma注释(lib, Ws2_32.lib) voidmain(){//加载套接字库,并进行套接字的版本协商WORDwVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本WSADATAwsaData//用于存储加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本信息intresult//用于检测WSAStartup函数运行结果wVersionRequested=MAKEWORD(1,1);//设定版本result=wsa startup(wVersionRequested,wsa data);//函数WSAStartup调用成功返回0 //出错处理如果(结果!=0){ return;}if(LOBYTE(wsaData.wVersion)!=1HIBYTE(wsaData.wVersion)!=1){ wsacleaup();返回;}//创建套接字SOCKETsock=socket(AF_INET,SOCK_STREAM,0);//绑定套接字SOCKADDR _ INaddrInfo//存储本地主机地址信息addrInfo.sin_addr .S_un .s _ addr=htonl(在addr _ ANY中);//本地主机地址addrinfo。sin _ port=htons(6000);//端口号addrInfo.sin _ family=AF _ INET//地址族bind(sock,(SOCKADDR*) addrInfo,sizeof(SOCKADDR));//设置套接字监听模式听(袜子,5);SOCKADDR _ inadrinfoclient//存储客户端地址信息int len=sizeof(SOCKADDR);while(true){//等待客户请求到来,并返回用于通信的套接字SOCKETsockConnect=accept(sock,(SOCKADDR*) addrInfoClient,len);//下面通过刚建立的套接字,来进行通信//发送数据charsendBuf[100];sprintf(sendBuf,这是服务器端,主机地址:%s ,inet _ ntoa(addrinfo。sin _ addr));send(sockConnect,sendBuf,strlen(sendBuf),0);//接收数据charrecvBuf[100];recv(sockConnect,recvBuf,strlen(recvBuf),0);//打印接收的数据printf(%sn ,recvBuf);关闭插座(sock connect);} } #包含Winsock2.h

  #包含标准视频

  #杂注注释(库, Ws2_32.lib )

  void main()

  //加载套接字库,并进行套接字的版本协商

  WORD wVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本

  WSADATA wsaData//用于存储加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本信息

  (同Internationalorganizations)国际组织结果;//用于检测WSAStartup函数运行结果

  wVersionRequested=MAKEWORD(1,1);//设定版本

  result=wsa startup(wVersionRequested,wsa data);

  //函数WSAStartup调用成功返回0

  //出错处理

  如果(结果!=0)

  返回;

  if (LOBYTE(wsaData.wVersion)!=1 HIBYTE(wsaData.wVersion)!=1)

  WSACleanup();

  返回;

  //创建套接字

  SOCKET sock=socket(AF_INET,SOCK_STREAM,0);

  //绑定套接字

  SOCKADDR _ IN addrInfo//存储本地主机地址信息

  addrInfo.sin_addr .S_un .s _ addr=htonl(在addr _ ANY中);//本地主机地址

  addrinfo。sin _ port=htons(6000);//端口号

  addrInfo.sin _ family=AF _ INET//地址族

  bind(sock,(SOCKADDR *) addrInfo,sizeof(SOCKADDR));

  //设置套接字监听模式

  听(袜子,5);

  SOCKADDR _ IN addrInfoClient//存储客户端地址信息

  int len=sizeof(SOCKADDR);

  而(真)

  //等待客户请求到来,并返回用于通信的套接字

  SOCKET sockConnect=accept(sock,(SOCKADDR *) addrInfoClient,len);

  //下面通过刚建立的套接字,来进行通信

  //发送数据

  char send buf[100];

  sprintf(sendBuf,这是服务器端,主机地址:%s ,inet _ ntoa(addrinfo。sin _ addr));

  send(sockConnect,sendBuf,strlen(sendBuf),0);

  //接收数据

  char recvBuf[100];

  recv(sockConnect,recvBuf,strlen(recvBuf),0);

  //打印接收的数据

  printf(%sn ,recvBuf);

  关闭插座(sock connect);

  }

  客户端代码:

  【cpp】查看plaincopyprint?

  #包括Winsock 2。h #包含stdio。h # pragma注释(lib, Ws2_32.lib) voidmain(){//加载套接字库,并进行套接字的版本协商WORDwVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本WSADATAwsaData//用于存储加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本信息intresult//用于检测WSAStartup函数运行结果wVersionRequested=MAKEWORD(1,1);//设定版本result=wsa startup(wVersionRequested,wsa data);//函数WSAStartup调用成功返回0 //出错处理如果(结果!=0){ return;}if(LOBYTE(wsaData.wVersion)!=1HIBYTE(wsaData.wVersion)!=1){ wsacleaup();返回;}//创建套接字socket SOCK connect=socket(AF _ INET,SOCK_STREAM,0);//向服务器发出连接请求SOCKADDR _ INaddrInfoServer//存储服务器端地址信息addrInfoServer.sin_addr .S_un .s _ addr=inet _ addr( 127。0 .0 .1 );addrinfoserver。sin _ port=htons(6000);addrinfoserver。sin _家庭=AF _ INET//向服务器发出连接请求connect(sockConnect,(SOCKADDR*) addrInfoServer,sizeof(SOCKADDR));//接收数据charrecvBuf[100];recv(sockConnect,recvBuf,sizeof(recvBuf),0);printf(%sn ,recvBuf);//发送数据charsendBuf[100]=这是客户端 n ;send(sockConnect,sendBuf,sizeof(sendBuf) 1,0);//关闭套接字关闭插座(sock connect);WSACleanup();系统("暂停");返回;} #包含Winsock2.h

  #包含标准视频

  #杂注注释(库, Ws2_32.lib )

  void main()

  //加载套接字库,并进行套接字的版本协商

  WORD wVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本

  WSADATA wsaData//用于存储加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本信息

  (同Internationalorganizations)国际组织结果;//用于检测WSAStartup函数运行结果

  wVersionRequested=MAKEWORD(1,1);//设定版本

  result=wsa startup(wVersionRequested,wsa data);

  //函数WSAStartup调用成功返回0

  //出错处理

  如果(结果!=0)

  返回;

  if (LOBYTE(wsaData.wVersion)!=1 HIBYTE(wsaData.wVersion)!=1)

  WSACleanup();

  返回;

  //创建套接字

  SOCKET SOCK connect=SOCKET(AF _ INET,SOCK_STREAM,0);

  //向服务器发出连接请求

  SOCKADDR _ IN addrInfoServer//存储服务器端地址信息

  addrInfoServer.sin_addr .S_un .s _ addr=inet _ addr( 127。0 .0 .1 );

  addrinfoserver。sin _ port=htons(6000);

  addrinfoserver。sin _家庭=AF _ INET

  //向服务器发出连接请求

  connect(sockConnect,(SOCKADDR *) addrInfoServer,sizeof(SOCKADDR));

  //接收数据

  char recvBuf[100];

  recv(sockConnect,recvBuf,sizeof(recvBuf),0);

  printf(%sn ,recvBuf);

  //发送数据

  char sendBuf[100]=这是客户端 n ;

  send(sockConnect,sendBuf,sizeof(sendBuf) 1,0);

  //关闭套接字

  关闭插座(sock connect);

  WSACleanup();

  系统("暂停");

  返回;

  }

  ================================================

  /*

  服务端程序流程:

  1.加载套接字库WSAStartup

  2.创建套接字窝

  3.将创建的套接字绑定到一个本地地址和端口上约束

  4.等待接收数据。后与客户端实现实时交流接收/发送

  5.关闭套接字封闭插座

  客户端程序流程:

  1.加载套接字库WSAStartup

  2.创建套接字窝

  3.向服务器发送数据。后与服务端实现实时交流接收/发送

  4.关闭套接字封闭插座

  */

  服务器端代码:

  【cpp】查看plaincopyprint?

  #包括Winsock 2。h #包含stdio。h # pragma注释(lib, Ws2_32.lib) voidmain(){//加载套接字库,并进行套接字的版本协商WORDwVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本WSADATAwsaData//用于存储加载的wdnsock库版本信息intresult//用于检测WSAStartup函数运行结果wVersionRequested=MAKEWORD(1,1);//设定版本result=wsa startup(wVersionRequested,wsa data);//函数WSAStartup调用成功返回0 //出错处理如果(结果!=0){ return;}if(LOBYTE(wsaData.wVersion)!=1HIBYTE(wsaData.wVersion)!=1){ wsacleaup();返回;}//创建用于套接字socket SOCK connect=socket(AF _ INET,SOCK_DGRAM,0);//绑定套接字SOCKADDR _ INaddrInfo//存储本地主机地址信息addrInfo.sin_addr .S_un .s _ addr=htonl(在addr _ ANY中);//本地主机地址addrinfo。sin _ port=htons(6000);//端口号addrInfo.sin _ family=AF _ INET//地址族bind(sockConnect,(SOCKADDR*) addrInfo,sizeof(SOCKADDR));//等待接收数据charrecvBuf[100];//接收数据缓冲charsendBuf[100];//发送数据缓冲chartempBuf[200];SOCKADDR _ inadrinfoclient//存储客户端地址信息int len=sizeof(SOCKADDR);while(true){ recvfrom(sock connect,recvBuf,strlen(recvBuf),0,(SOCKADDR*) addrInfoClient,len);if( q ==recvBuf[0]){ send to(sock connect, q ,strlen(q) 1,0,(SOCKADDR*) addrInfoClient,len);printf(聊天结束);打破;}sprintf(tempBuf, %s说:%s ,inet _ ntoa(addrinfoclient。sin _ addr)、recvBuf);printf(%sn ,tempBuf);//发送数据printf(我说:);gets(发送buf);sendto(sockConnect,sendBuf,strlen(sendBuf) 1,0,(SOCKADDR*) addrInfoClient,len);}//关闭套接字关闭插座(sock connect);WSACleanup();} #包含Winsock2.h

  #包含标准视频

  #杂注注释(库, Ws2_32.lib )

  void main()

  //加载套接字库,并进行套接字的版本协商

  WORD wVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本

  WSADATA wsaData//用于存储加载的wdnsock库版本信息

  (同Internationalorganizations)国际组织结果;//用于检测WSAStartup函数运行结果

  wVersionRequested=MAKEWORD(1,1);//设定版本

  result=wsa startup(wVersionRequested,wsa data);

  //函数WSAStartup调用成功返回0

  //出错处理

  如果(结果!=0)

  返回;

  if (LOBYTE(wsaData.wVersion)!=1 HIBYTE(wsaData.wVersion)!=1)

  WSACleanup();

  返回;

  //创建用于套接字

  SOCKET SOCK connect=SOCKET(AF _ INET,SOCK_DGRAM,0);

  //绑定套接字

  SOCKADDR _ IN addrInfo//存储本地主机地址信息

  addrInfo.sin_addr .S_un .s _ addr=htonl(在addr _ ANY中);//本地主机地址

  addrinfo。sin _ port=htons(6000);//端口号

  addrInfo.sin _ family=AF _ INET//地址族

  bind(sockConnect,(SOCKADDR *) addrInfo,sizeof(SOCKADDR));

  //等待接收数据

  char recvBuf[100];//接收数据缓冲

  char send buf[100];//发送数据缓冲

  char tempBuf[200];

  SOCKADDR _ IN addrInfoClient//存储客户端地址信息

  int len=sizeof(SOCKADDR);

  而(真)

  recvfrom(sockConnect,recvBuf,strlen(recvBuf),0,(SOCKADDR *) addrInfoClient,len);

  if (q==recvBuf[0])

  sendto(sockConnect, q ,strlen(q) 1,0,(SOCKADDR *) addrInfoClient,len);

  printf(聊天结束);

  打破;

  sprintf(tempBuf, %s说:%s ,inet _ ntoa(addrinfoclient。sin _ addr)、recvBuf);

  printf(%sn ,tempBuf);

  //发送数据

  printf(我说:);

  gets(发送buf);

  sendto(sockConnect,sendBuf,strlen(sendBuf) 1,0,(SOCKADDR *) addrInfoClient,len);

  //关闭套接字

  关闭插座(sock connect);

  WSACleanup();

  }

  客户端代码:

  【cpp】查看plaincopyprint?

  #包括Winsock 2。h #包含stdio。h # pragma注释(lib, Ws2_32.lib) voidmain(){//加载套接字库,并进行套接字的版本协商WORDwVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本WSADATAwsaData//用于存储加载的wdnsock库版本信息intresult//用于检测WSAStartup函数运行结果wVersionRequested=MAKEWORD(1,1);//设定版本result=wsa startup(wVersionRequested,wsa data);//函数WSAStartup调用成功返回0 //出错处理如果(结果!=0){ return;}if(LOBYTE(wsaData.wVersion)!=1HIBYTE(wsaData.wVersion)!=1){ wsacleaup();返回;}//创建套接字socket SOCK connect=socket(AF _ INET,SOCK_DGRAM,0);//向服务器发送数据SOCKADDR _ INaddrInfoServer//存储服务器地址信息addrInfoServer.sin_addr .S_un .s _ addr=inet _ addr( 127。0 .0 .1 );//指定服务器地址addrinfoserver。sin _ port=htons(6000);//端口号addrinfoserver。sin _家庭=AF _ INET//地址族int len=sizeof(SOCKADDR);charrecvBuf[100];//接收数据缓冲charsendBuf[100];//发送数据缓冲chartempBuf[200];while(true){//发送数据printf(我说:);gets(发送buf);sendto(sockConnect,sendBuf,strlen(sendBuf) 1,0,(SOCKADDR*) addrInfoServer,len);//等待并接收数据recvfrom(sockConnect,recvBuf,strlen(recvBuf),0,(SOCKADDR*) addrInfoServer,len);if( q ==recvBuf[0]){ send to(sock connect, q ,strlen(q) 1,0,(SOCKADDR*) addrInfoServer,len);printf(聊天结束);打破;}sprintf(tempBuf, %s说:%s ,inet _ ntoa(addrinfoserver。sin _ addr)、recvBuf);printf(%sn ,tempBuf);}//关闭套接字关闭插座(sock connect);WSACleanup();} #包含Winsock2.h

  #包含标准视频

  #杂注注释(库, Ws2_32.lib )

  void main()

  //加载套接字库,并进行套接字的版本协商

  WORD wVersionRequested//指定将要加载的以购买力平价/滑动连线者必须准备的专用于购买力平价/滑动方式的通讯软体库版本

  WSADATA wsaData//用于存储加载的wdnsock库版本信息

  (同Internationalorganizations)国际组织结果;//用于检测WSAStartup函数运行结果

  wVersionRequested=MAKEWORD(1,1);//设定版本

  result=wsa startup(wVersionRequested,wsa data);

  //函数WSAStartup调用成功返回0

  //出错处理

  如果(结果!=0)

  返回;

  if (LOBYTE(wsaData.wVersion)!=1 HIBYTE(wsaData.wVersion)!=1)

  WSACleanup();

  返回;

  //创建套接字

  SOCKET SOCK connect=SOCKET(AF _ INET,SOCK_DGRAM,0);

  //向服务器发送数据

  SOCKADDR _ IN addrInfoServer//存储服务器地址信息

  addrInfoServer.sin_addr .S_un .s _ addr=inet _ addr( 127。0 .0 .1 );//指定服务器地址

  addrinfoserver。sin _ port=htons(6000);//端口号

  addrinfoserver。sin _家庭=AF _ INET//地址族

  int len=sizeof(SOCKADDR);

  char recvBuf[100];//接收数据缓冲

  char send buf[100];//发送数据缓冲

  char tempBuf[200];

  而(真)

  //发送数据

  printf(我说:);

  gets(发送buf);

  sendto(sockConnect,sendBuf,strlen(sendBuf) 1,0,(SOCKADDR*) addrInfoServer,len);

  //等待并接收数据

  recvfrom(sockConnect,recvBuf,strlen(recvBuf),0,(SOCKADDR*) addrInfoServer,len);

  if (q==recvBuf[0])

  sendto(sockConnect, q ,strlen(q) 1,0,(SOCKADDR*) addrInfoServer,len);

  printf(聊天结束);

  打破;

  sprintf(tempBuf, %s说:%s ,inet _ ntoa(addrinfoserver。sin _ addr)、recvBuf);

  printf(%sn ,tempBuf);

  //关闭套接字

  关闭插座(sock connect);

  WSACleanup();

  }

  【cpp】查看plaincopyprint?

  vc编程的常见类型分析:1 .套接字类型SOCKET是一种套接字类型,在WINSOCK2中有如下定义。h:typedefunsignedu _ int;typedefu _ intSOCKET可以看出,socket实际上是一个无符号的整形,会被Socket环境管理和使用。套接字将被创建、设置、用于发送和接收数据,并最终被关闭。2.WORD类型,MAKEWORD,LOBYTE,HIBYTE宏WORD类型是16位无符号整数,在WTYPES中定义为:typedefunsignedshortWORD。h;它的目的是提供两个字节的存储,可以在Socket中表示主版本号和次版本号。使用MAKEWORD宏为单词类型赋值。例如,要指示主版本号2和次版本号0,可以使用以下代码:WORDwVersionRequestedwVersionRequested=MAKEWORD(2,0);请注意,下部存储器存储主版本号2,上部存储器存储次版本号0,值为0x0002。使用宏LOBYTE读取WORD的低位字节,使用HIBYTE读取高位字节。3.WSADATA类型和LPWSADATA类型WSADATA类型是一个结构,描述了套接字库的一些相关信息。其结构定义如下:TypeDefstructWSADATA { Word WVersion;WORDwHighVersioncharsz description[wsa description _ LEN 1];charszSystemStatus[wsa sys _ STATUS _ l EN 1];unsignedshortiMaxSocketsunsignedshortiMaxUdpDgcharFAR * lpVendorInfo} WSADATAtypedefWSADATAFAR * LPWSADATA值得注意的是,wVersion字段存储了套接字的版本类型。WSADATA是wsadata的指针类型。它们通过Socket的初始化函数WSAStartup读取。vc编程中常用函数分析:1。WSAStartup函数用于初始化Socket环境,其原型为Int WSA Startup(WordwVersionRequested,lpwsadatalpwsadata);返回值为整数,调用方法为PASCAL(即标准类型,PASCAL等于__stdcall)。有两个参数。第一个参数是WORD type,表示套接字的版本号,第二个参数是LPWSADATA,指向一个用于存储套接字库信息的WSAStartup结构。返回值:如果返回值为0,则初始化成功;如果不是0,就是失败。2.WSACleanup函数这是Socket环境的出口函数。函数的原型是intWSACleanup(void);返回值:返回值0表示成功,SOCKET_ERROR表示失败。3.socket函数socket创建函数,函数原型:Socket Socket (INTAF,INTType,int protocol);第一个参数是intaf,它表示网络地址族。目前只有一个值有效,即AF_INET,代表互联网地址族。第二个参数是:inttype,代表网络协议类型,SOCK_DGRAM代表UDP协议,SOCK_STREAM代表TCP协议。第三个参数是:intprotocol,指定网络地址族的特殊协议。目前没用,可以赋0值。返回值:返回值是SOCKET如果返回INVALID_SOCKET,将会失败。4.bind函数用于将套接字绑定到已知地址,其原型为intbind (sockets,conststructsockaddrfar * name,intnamelen);第一个参数是:SOCKETs,它指定要绑定的套接字。第二个参数是SOCKADDR_IN*name,它是指向SOCKADDR结构的指针,该结构包含要绑定的地址和端口。第三个参数是intnamelen,它决定第二个参数的结构长度。返回值:0表示成功,SOCKET_ERROR表示失败。分析以下类型:sockaddr类型:sockaddr类型用于表示套接字地址。相对于上面的socketaddr_in类型,sockaddr的适用范围更广,因为sockeaddr_in只适用于TCP/IP地址。socdr的定义如下:structsockaddr { ushortsa _ family;charsa _ data[14];};可以知道sockaddr有16个字节,sockaddr_in也有16个字节,所以sockaddr_in可以强制转换成sockaddr。事实上,这种方法经常被使用。Sockaddr_in定义了套接字发送和接收数据包的地址,定义如下:strucrsockaddr _ in { shorts in _ family;u _ shortsin _ portstructin _ addrsin _ addrcharsin _ zero[8];};In_addr定义如下:struct in _ addr { union { struct { u _ chars _ B1,s _ B2,s _ B3,s _ B4 } s _ un _ b;struct{u_shorts_w1,S _ w2 } S _ un _ w;u _ longS _ addr} S _ un};首先,阐述了地址的信仰。

  很明显是一个存储ip地址的联合体,有三种表达方式:第一种用四个字段表示IP地址的四位数;第二个使用两个双字节来表示IP地址;第三个用长整数表示IP地址;给in_addr赋值最简单的方法之一就是使用inet_addr函数,它可以把一个表示IP地址的字符串赋值转换成in_addr类型。例如addr server . sin _ addr=inet _ addr( 192 . 168 . 0 . 2 );它的反函数是inet_ntoa,可以把in_addr类型转换成字符串。sockaddr_in的含义比in_addr更广,每个字段的含义和取值如下:第一个字段shortsin_family表示网络地址族,前面说过,只能取值AF _ INET第二个字段u_shortsin_port,代表IP地址端口,由程序员指定;第三个字段structin_addrsin_addr表示IP地址;填充第四个字段charsin_zero[8]以确保SOCKADDR_in的长度等于SOCKADDR类型的长度。5.listen函数该函数允许套接字在指定IP地址的指定端口监听连接请求的到达。函数的原型:intlisten(SOCKETs,int backlog);这个函数使一个进程能够接受来自其他进程的请求,从而成为一个服务器进程。在TCP服务器编程中,listen函数将进程更改为服务器,并指定相应的套接字成为被动连接。listen函数通常在调用bind之后、调用accept之前调用。返回值:0表示成功,SOCKET_ERROR表示失败。您可以调用WSAGetLastError函数来获取错误代码。6.accept函数该函数从连接请求队列中获取连接信息,并创建一个新的套接字用于发送和接收数据,从而实现服务器与客户端的通信。原型:SocketAccept (sockets,structsockaddrfar * addr,int far * addrlen);第一个参数:SOCKETs,监控套接字;第二个参数:structsockaddraddr,存储请求7.connection的客户端的IP地址和端口信息;第三个参数:intaddrlen第二个参数的空间大小;返回值:成功返回一个新的套接字,如果失败则返回错误消息;7.connect函数向指定的网络主机请求连接,函数的原型是intconnect (sockets,conststructsockaddrfar * name,int第一个参数:sockets,客户端用来发送和接收数据的套接字。第二个参数:structsockaddr*name,指定网络主机的IP地址和端口号。第三个参数:intnamelen,第二个参数length返回值:0表示成功,-1表示失败。8.sendto、recvfrom、send和recv函数在Socket中有两组发送和接收函数。一个是sendto和recvfrom两个是发送和接收。前一套需要在函数参数中指定地址(UDP协议),后一套需要先将socket绑定到一个地址,然后直接发送和接收,不需要绑定地址。Prototype: intsendo (sockets,constcharfar * buf,intlen,intflags,conststructsockaddrfar * to,int tolen);intrecvfrom(SOCKETs,charFAR*buf,intlen,intflags,structsockaddrFAR*from,int far * from len);intsend(SOCKETs,constcharFAR * buf,intlen,int flags);intrecv(SOCKETs,charFAR*buf,intlen,int flags);第一个参数:socket,第二个参数:数据指针,第三个参数:数据长度,第四个参数:数据发送和接收方式的标识,如果没有特殊要求可以设置为0;参考MSDN;对于其他值;第五个参数:目标主机的地址。第六个参数:地址的长度。返回值:运行成功返回发送和接收数据的字节数,运行失败返回socket _ error9。closesocket函数关闭套接字,其原型是intclosesocket(SOCKETs)。返回值:0表示成功,SOCKET_ERROR表示失败。

  来自:http://博客。。net/ltag 0110 rtag/article/details/7390304

mfc编程基础,mfc编程技巧与范例详解