网络编程第三讲UDP编写

一丶UDP简介

  UDP是面向无连接的.就是说数据传输会丢掉.网络延时比较大的情况下.会早上丢包.例如视频通话.就是UDP

UDP不需要建立建立. 下面有UDP编写流程图

下图为TCP 跟UDP的区别.

UDP下收发函数有区别.

  发送数据: TCP: send UDP sendto

  接受数据:TCP: recv  UDP recvfrom

二丶UDP编写的完整代码

服务端:

  

#include <stdio.h>
#include <winsock2.h>
#include <Windows.h>#pragma comment(lib,"ws2_32.lib")
#define  PORT 6000int main(int argc, char* argv[])
{//初始化网络环境
    WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一个UDP的socketSOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sock == SOCKET_ERROR){printf("create socket failed\n");return -1;}//绑定地址信息
    sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(PORT);serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(sock, (sockaddr*)&serverAddr, sizeof(sockaddr));char buf[512];while (TRUE){memset(buf, 0, 512);// 网络节点的信息,用来保存客户端的网络信息
        sockaddr_in clientAddr;memset(&clientAddr, 0, sizeof(sockaddr_in));int clientAddrLen = sizeof(sockaddr);//接收客户端发来的数据int ret = recvfrom(sock, buf, 512, 0,(sockaddr*) &clientAddr,&clientAddrLen );printf("Recv msg:%s from IP:[%s] Port:[%d]\n", buf,inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));// 发一个数据包返回给客户sendto(sock, "Hello World!", strlen("Hello World!"), 0, (sockaddr*)&clientAddr, clientAddrLen);printf("Send msg back to IP:[%s] Port:[%d]\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));}return 0;
}

客户端

  

#include <stdio.h>
#include <winsock2.h>
#include <Windows.h>#pragma comment(lib,"ws2_32.lib")
#define  PORT 6000
int main(int argc, char* argv[])
{//初始化网络环境
    WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一个UDP的socketSOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sockClient == INVALID_SOCKET){printf("create socket failed\n");return -1;}// 申明一个网络地址信息的结构体,保存服务器的地址信息sockaddr_in addr = { 0 };addr.sin_family = AF_INET;addr.sin_port = htons(PORT);addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");char buf[] = "client test!";//发送数据int dwSent = sendto(sockClient, buf, strlen(buf), 0, (SOCKADDR *)&addr, sizeof(SOCKADDR));if (dwSent == 0){printf("send %s failed\n", buf);return -1;}printf("send msg:%s\n", buf);char recvBuf[512];memset(recvBuf, 0, 512);sockaddr_in addrSever = { 0 };int nServerAddrLen=sizeof(sockaddr_in);// 接收数据int dwRecv = recvfrom(sockClient, recvBuf, 512, 0, (SOCKADDR *)&addrSever,&nServerAddrLen);printf("Recv msg from server : %s\n", recvBuf);//关闭SOCKET连接
    closesocket(sockClient);//清理网络环境
    WSACleanup();system("pause");return 0;
}

链接:https://pan.baidu.com/s/11Gzqv-wynDslzCMnTgnpCw 密码:8f63

转载于:https://www.cnblogs.com/iBinary/p/9671780.html

网络编程第三讲UDP编写相关推荐

  1. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信

    如今,计算机已经成为人们学习.工作.生活必不可少的工具.人们利用计算机可以和亲朋好友在网上聊天,玩网游或发邮件等,这些功能的实现都离不开计算机网络.计算机网络实现了不同计算机之间的通信,而这些必须依靠 ...

  2. JavaEE 网络编程示例1 UDP套接字数据报编程 == 一发一收

    鲁吼呀,胶己人! 文章目录 JavaEE & 网络编程示例1 & UDP套接字数据报编程 ==> 一发一收 1. 协议分层(回顾) 2. 套接字 Socket 2.1 UDP与T ...

  3. QT入门第七天 网络编程TCP/IP/UDP+Http和JSON解析+qt事件软键盘【CSDN最详细】

    网络编程+Http和JSON解析+qt事件软键盘 第一章 QT中的网络编程 [1]涉及到的类 [2]tcp协议的流程 [2.1]服务器的流程 socket-->bind-->listen- ...

  4. python网络通信编程实例_python网络编程之数据传输UDP实例分析

    本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机 ...

  5. java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端

    //郑州轻工业大学 //题号:实验四 第二题 //题目:使用基于UDP的网络编程方法,完成客户端和服务器间的聊天功能.要求图形界面. java网络编程作业 基于UDP简单聊天窗口,图形化界面,包含客户 ...

  6. Qt网络编程-简易版UDP组播通信入门Demo(5)

    Qt网络编程-简易版UDP组播通信入门Demo(5)

  7. Linux Linux程序练习十一(网络编程大文件发送UDP版)

    //网络编程发送端--大文件传输(UDP) #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  8. udp recvfrom阻塞吗_网络编程原理与UDP实现

    本文作者:PsgQ 本文链接:https://www.cnblogs.com/PsgQ/p/14089310.html 如何发送数据包? Q:当应用程序产生数据的时候,需要去构造数据包并发送到网络上去 ...

  9. linux网络编程tcp和udp基本函数调用过程及如何选择

    1. socket编程 1.1 概述 TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务.它采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号.确认重传.滑动窗口等 ...

最新文章

  1. 聚焦3D地形编程第五章GeomipMapping for the CLOD
  2. websocket协议
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
  4. 外包程序员入职蚂蚁金服被质疑,网友:人生污点
  5. Linux mysql设置密码
  6. 思科计算机网络题目及翻译3,思科计算机网络题目及翻译1.doc
  7. freeradius+mysql+交换机认证
  8. Leetcode每日一题:452.minimum-number-of-arrows-to-burst-balloons(最少数量的箭引爆气球)
  9. 【实习之T100开发】T100 Q查询开发流程
  10. 7-1 是否同一棵二叉搜索树 (25 分)
  11. java国际化程序创建属性文件_Java国际化(i18n)ResourceBundle类
  12. C# DataTable.Select() 筛选数据
  13. 腾讯全套人力资源管理资料大全(职位能力模型图+人力资源管理+招聘体系+培训体系+薪酬绩效+员工职业发展,共174M)
  14. 详述快捷支付产品功能及设计要点
  15. 前端开发者思考:假如5年后你是开发总监
  16. ccf有趣的数java_CCF CSP 有趣的数
  17. 利用Java反射机制调用含数组参数的方法
  18. 原生openwrt+极路由4+路由模式光猫+中继光猫wifi+设置ipv6上网
  19. vue-router.esm-bundler.js?6c02:1474 Uncaught TypeError: Cannot read property ‘forEach‘ of undefined
  20. 揭秘你喜欢的3D电影、游戏角色的制作过程!

热门文章

  1. Mysqldump逻辑备份与恢复
  2. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
  3. Spring.Net学习笔记(2)-依赖注入
  4. 如何修改DeDe标签Pagelist分页样式详解
  5. 使用.Net图表开发工具JDash.Net添加组件
  6. VS 2010 开发 ActiveX 自动升级篇
  7. 【测】测试用MetaWeblog访问博客园
  8. k8s单节点部署(master ,node部分)
  9. linux中断处理函数参数,第9章 设置ISR(中断处理函数)
  10. 图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议