UDP通信

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_ADDR

inet_ntoa( struct in_addr in)将一个IP转换成一个互联网标准点分格式的字符串,正确就返回一个存储着点分格式IP地址的静态缓冲区,错误返回NULL;

int PASCAL FAR bind( SOCKET s/*套接口描述字*/, const struct sockaddr FAR* name/*赋予套接口地址*/,int namelen/*套接口地址长度*/);

添加线程接受数据

       创建线程数据结构体--->CreateThread()---->添加线程函数(线程函数不能为类的成员函数,可以通过定义为类的静态成员函数)---->RecvForm()函数

 

原文地址:https://www.cnblogs.com/jackcin/p/3230658.html