UDP 本身是一种无连接的协议
它只管发送,而不需要知道,发送的包是不是准确的到达了目的地
所以它具有发送效率高的特点,同时也具有丢包的弱点
但如果对 udp 加一些验证和重发机制,就能很大程度上避免丢包的情况,达到稳定的传输
同时,此种方式的传输速度会比 TCP 方式的传输快很多
以下是一种串行的带验证重发机制的UDP 传输文件,源代码,client 负责发文件,server 负责接文件
希望对大家有帮助
程序中,发送的包是自己定义的,这样除了可以将需要发送的数据发送过去外,还可以将一些控制信息发过去
SERVER 端: #include #include #include #include #include #pragma comment( lib, "ws2_32
lib" ) #define PORT 8000 #define SERVER "192
211" SOCKET sock; int sendexit=0;//控制发送线程状态的全局变量 int recvexit=0;//控制接收程状态的全局变量 int filesize=1;//记录文件大小的全局变量 int recvsize=0;//记录文件大小的全局变量 int id=1; sockaddr_in server; int len =sizeof(server); struct baohead//包头 { int size; int id; int recvsize; }; typedef baohead ElemType; baohead datahead; struct recvbuf//包格式 { ElemType head;//包头 char buf[1024];//存放数据的变量 int bufSize;//存放数据长度的变量 }; struct recvbuf data; DW