UDP与TCP:
TCP:传输控制协议,提供面向连接、可靠地数据流服务。客户与服务器进行通信的过程中必须在双方之间建立TCP协议,TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能都在双方之间传送。
UDP:用户数据包协议,简单的面向数据包的运输层协议。因为没有严格的校验与检查机制,因而能够进行快速的数据传输。
进行UDP通信的首要步骤:必须加载相应版本的socket。本文中提供两种方式对UDP通信编程。
MFC:
在MFC中只需要加载AfxSocketInit()函数加载,头文件<afxSocket.h>
相关函数:
socket(int af ,int type,int protocal)
af:地址描述,目前只支持AF_INET :ARPA Internet格式
type:socket类型,TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)等
protocal:套接口所用的协议,0表示无协议,IPPROTO_TCP、IPPTOTO_UDPIPPROTO_SCTP、 IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
SOCKADDR:通用地址结构,统一参与windows套接字通信的计算机上的一个通信的协议。一般使用SOCKADDR_IN数据结构进行操作,由于Microsoft TCP/IP套接字开发人员的工具箱仅支持internet地址字段,而实际填充字段的每一部分则遵循sockaddr_in数据结构,两者大小都是16字节,所以二者之间可以进行切换。
struct socketaddr_in { short int sin_family; //指代协议族,socket编程中只能是AF_INET unsigned short int sin_port; // 存储端口号(使用网络字节顺序) struct int_addr sin_addr; // 存储IP地址,使用in_addr这个数据结构 unsigned char sin_zero[8]; // 为了让ssocketaddr_in与ocketaddr保持大小相同而保留的空字节 } typedef struct in_addr { union { //三种存储IP地址的联合体,第一种四个字节表示IP地址的四个数字,第二种 //用两个双字节来表示IP地址 //第三种用一个长整形来表示IP地址 struct{unsigned char s_b1,s_b2,s_b3,s_b4;}S_un_b; struct{unsigned short s_w1,s_w2;}S_un_w; unsigned long S_addr; }S_un; }IN_ADDRinet_ntoa( struct in_addr in)将一个IP转换成一个互联网标准点分格式的字符串,正确就返回一个存储着点分格式IP地址的静态缓冲区,错误返回NULL;
int PASCAL FAR bind( SOCKET s/*套接口描述字*/, const struct sockaddr FAR* name/*赋予套接口地址*/,int namelen/*套接口地址长度*/);
添加线程接受数据
创建线程数据结构体--->CreateThread()---->添加线程函数(线程函数不能为类的成员函数,可以通过定义为类的静态成员函数)---->RecvForm()函数