1. UDP数据的收发

UDP协议使用函数sendto发送函数,使用函数recvfrom接收数据。

  1. 数据发送函数sendto

函数原型:

intsendto(int s , const void *msg, int len, int flags, const structsockaddr *to, int tolen);

通过函数sendto发送数据时总能立即成功返回。它不保证对方套接字是否成功接收,甚至不保证对方套接字协议信息的正确性。

  1. 数据接收函数recvfrom

函数原型:

intrecvfrom(int s, void *buf, int len, int flags, struct sockaddr *from,int *fromlen);

参数flags通常取0即可。函数recvfrom默认以阻塞方式读取数据,成功时返回接收数据的字节长度。

  1. UDP协议的基础编程

    1. 基本编程步骤

步骤1:创建套接字描述符。

步骤2:服务器端命名套接字

服务器端进程调用build将套接字描述符绑定协议、本地址和本地端口。

步骤3:客户—服务器端通信

客户端与服务器端的套接字进行数据传输,调用sendto可向对方发送数据,调用recvfrom可接收数据。

步骤4:关闭套接字。

调用close或shutdown关闭套接字。

  1. 创建服务器端套接字程序

intCreateUdpSock(int *pnSock, int nPort)

{

structsockaddr_in addrin;

structsockaddr *paddr = (struct sockaddr*)&addrin;

ASSERT(pnSock!= NULL && nPort > 0);

memset(&addrin,0, sizeof(addrin));

/*协议组包*/

addrin.sin_family= AF_INET;

addrin.sin_addr.s_addr= htonl(INADDR_ANY);

addrin.sin_port= htons(nPort);

ASSERT((*pSock= socket(AF_INET, SOCK_DGRAM, 0)) > 0);

if(VERIFY(bind(*pnSock,paddr, sizeof(addrin)) >= 0))

return0;

VERIFY(close(*pnSock)==0);

return1;

}

PS:与TCP方式相比,没有listen和accept。

  1. 创建UDP套接字发送程序

intSendMsgByUdp(void *pMsg, int nSize, char *szAddr, int nPort)

{

intnSock;

structsockaddr_in addrin;

ASSERT((nSock= socket(AF_INET, SOCK_DGRAM, 0)) > 0);

memset(&addrin,0, sizeof(struct sockaddr));

addrin.sin_family= AF_INET;

addrin.sin_addr.s_addr= inet_addr(szAddr);

addrin.sin_port= htons(nPort);

VERIFY(sendto(nSock,pMsg, nSize, 0, (struct sockaddr *)&addrin, sizeof(addrin)) >0);

close(nSock);

return0;

}

  1. UDP套接字接收程序

intRecvMsgByUdp(int nFile, void *pData, int *pnSize)

{

intnSize;

/***接收数据,并不关心发送方协议地址****/

VERIFY((*pnSize= recvfrom(nFile, pData, *pnSize, 0, NULL, NULL));

return0;

}

转载于:https://my.oschina.net/fuyajun1983cn/blog/263852

专题 16 基于UDP的通信程序设计相关推荐

  1. android udp定时发送,Android Socket基于UDP协议通信

    首先我们要知道UDP通信协议是Socket通信的一种实现方式,Socket通信一般有两种通信方式:基于TCP协议.基于UDP协议.这两者的差别和优缺点就不说了,这里主要讲一下基于UDP协议的实现. 基 ...

  2. 使用C#实现基于UDP的通信 基本原理

    使用Socket进行通信中,UDP是一种轻量级的无连接的通信协议.相对于TCP的安全可靠且又可以双工通信,UDP则更强调简单高效,而且利用UDP的无连接特性,我们可以穿透局域网,很多时候能够实现TCP ...

  3. 网络编程(socket)套接字之基于udp的套接字

    基于udp的网络编程 特点:不需要提前建立链接,每次收发都需要获取ip和端口 又称数据报协议,一次发送对应一次接收,不会产生粘包问题    不可靠传输,发送数据不需要回复ACK确认信息    没有链接 ...

  4. 网络与通信程序设计-基于UDP的广播通信实例

    目录 实验内容和设计思想 实验的内容 UDP的设计思想 UDP的协议头部 UDP通信编程思想 UDP的工作流程 UDP编程收发函数 广播通信 广播模式设置 广播套接字 UDP Socket的使用过程 ...

  5. 基于Linux用C语言实现TCP半双工通信和UDP半双工通信

    文章目录 TCP协议/UDP协议介绍 三种通信方式 实现TCP半双工通信 所用到的结构体与函数 源代码 运行结果 实现UDP半双工通信 源代码 运行结果 参考文章 TCP协议/UDP协议介绍 TCP/ ...

  6. Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真

    文章目录 Windows网络与通信程序设计实验一:基于TCP的C/S通信仿真 1. 实验要求: 1.1 实验目的介绍: 1.2 实验相关提示: 2. 实验环境准备: 3. 实验步骤和具体代码理解: 3 ...

  7. Xilinx-AX7103-学习笔记(25):基于UDP的以太网通信

    Xilinx-AX7103-学习笔记(25):基于UDP的以太网通信 实验将实现AX7103开发板和PC之间进行以太网数据通信, 通信协议采用Ethernet UDP通信协议.开发板上FPGA通过以太 ...

  8. Python中的端口协议之基于UDP协议的通信传输

    阅读目录 UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) 3.利用socketserver模块实现udp传输协议的并发通 ...

  9. Java 基于 UDP 实现 Socket中的多客户端通信

    这里原理同 TCP/IP 实现多客户端通信的原理是一样的,同样的 UDPClient.java 不变,与上一篇文章中描述的一致,无需修改 UDPServer.java package com.lear ...

最新文章

  1. 在redhat9上安装firefox
  2. linux zipinfo 命令详解
  3. 【报名开启】阿里云线下Workshop让你玩转ECS 快速搭建云上博客
  4. Git之深入解析本地仓库的基本操作·仓库的获取更新和提交历史的查看撤销以及标签别名的使用
  5. 2019年6月SAP发布的未来ABAP平台的发展方向
  6. storm计数器(小白看懂系列)
  7. linux修改resolv自动清除,centos 6.2的/etc/resolv.conf自动清空问题
  8. C语言,快速隐藏/显示桌面图标和任务栏
  9. Quadratic probing
  10. 理解JDBC/JPA/Mybatis/Hibernate
  11. ABS系统类最新发表的论文趋势怎么看?
  12. (淘宝无限适配)手机端rem布局
  13. SQLZOOL练习题答案和解析 第1关 SELECT name
  14. 爬虫学习:爬取京东图书
  15. Bash shell语言学习
  16. GBase 8s的高可用1-HAC(双机高性能实时数据复制)高可用方案
  17. 11g 配置 dgmgrl 以及报错 DataGuard ORA-00313,
  18. 怎么禁用chrom'停用开发者模式'弹窗
  19. html固定页脚布局及样式,html页脚固定在底部的方法
  20. 宜信区块链实践-案例及探索

热门文章

  1. Asp.Net获取客户端信息-学习中
  2. 国内卫星通信技术发展及应用概述
  3. iis8.5部署net项目
  4. Python 技术点
  5. NLP深度学习:近期趋势概述 1
  6. javaSE----eclipse的安装与使用
  7. 从零开始开发JVM语言(十一)Lambda
  8. asp.net模糊查询存储过程
  9. CISCO交换机配置命令大全
  10. premiere pr 波纹编辑 滚动编辑 比率拉伸 工具使用