网络中UDP编程

这篇具有很好参考价值的文章主要介绍了网络中UDP编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络

1.recvfrom

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
    功能:
        从套接字中接收数据
    参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        flags:属性 默认为0 
        src_addr:存放IP地址信息的空间首地址
        addrlen:存放接收到IP地址大小空间的首地址
    返回值:
        成功返回实际接收字节数
        失败返回-1 

修改虚拟机到桥接模式:

    点击"虚拟机"
    点击"设置"
    点击"网络适配器"
    选择"桥接模式"
    点击"确定"

将网卡桥接到无线网卡

    点击"编辑"
    点击"虚拟网络编辑器"
    点击"更改设置"

在Ubuntu中重启网络服务

    sudo /etc/init.d/networking restart  --- 重启网络

    ifconfig  ---  查看linux的网络ip地址

2.bind 

   int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
    功能:
        在套接字上绑定一个IP地址和端口号
    参数:
        sockfd:套接字文件描述符
        addr:绑定IP地址空间首地址
        addrlen:绑定IP地址的长度
    返回值:
        成功返回0 
        失败返回-1 

3.UDP编程:

    发端:socket (创建套接字文件)-> sendto(发端) -> close 
    收端:  socket(创建套接字文件)-> bind (定义收端的端口和ip)-> recvfrom(收端) ->                        close 

eg:发端代码   /    收端代码

#include"head.h"

int main(void)                  //发端
{
	int sockfd = 0;
	struct sockaddr_in sendaddr;
	char tmpbuff[1024] = {0};   //储存发送内容的信息
	ssize_t nsize = 0;

	fgets(tmpbuff,sizeof(tmpbuff),stdin);

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);   //数据报套接字        //创建一个用来通信的文件描述符
	if(sockfd == -1)
	{
		perror("fail to socket");
		return -1;
	}

	sendaddr.sin_family = AF_INET; //协议族
	sendaddr.sin_port = htons(50000);   //端口号    //将本地字节序转换为网络的大端字节序   //要发送的主机端口号
	sendaddr.sin_addr.s_addr = inet_addr("192.168.1.182");   //ip    //将字符串IP地址转换内存中的ip地址    //要发送的主机ip号
	nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&sendaddr, sizeof(sendaddr)); //利用套接字向指定地址发送数据信息
    if (-1 == nsize)
	{
		perror("fail to sendto");
		return -1;
	}

	printf("已发送个 %ld 字节1\n",nsize);

	close(sockfd);

	return 0;

}
#include"head.h"

int main(void)                                     //收端
{
	int sockfd = 0;
	int ret = 0;
	struct sockaddr_in recvaddr; 
	struct sockaddr_in tmpaddr;          //存储收信息的主机的端口和ip
	char tmpbuff[1024] = {0};
	ssize_t nsize = 0;
	socklen_t addrlen =  sizeof(tmpaddr);

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (-1 == sockfd)
	{
		perror("fail to socket");
		return -1;
	}

	/* 绑定自己的端口和ip地址 */     //ip地址 用ifconfig 查看
	recvaddr.sin_family = AF_INET;
	recvaddr.sin_port = htons(30000);
	recvaddr.sin_addr.s_addr = inet_addr("192.168.1.176");
	ret = bind(sockfd, (struct sockaddr *)&recvaddr, sizeof(recvaddr));
	if(ret == -1)
	{
		perror("fail to bind");
		return -1;
	}

	/* 接收的信息内容 */
	nsize = recvfrom(sockfd,tmpbuff,sizeof(tmpbuff),0,(struct sockaddr *)&tmpaddr,&addrlen);
	if (-1 == nsize)
	{
		perror("fail to recvfrom");
		return -1;
	}

	printf("接收到了%ld个字节\n",nsize);

	printf("RECV ASCII FROM %s:%d>%s\n", inet_ntoa(tmpaddr.sin_addr), ntohs(tmpaddr.sin_port), tmpbuff);    //打印接收信息的主机的端口和ip地址
	close(sockfd);

	return 0;


}

4.UDP需要注意的细节点:

    1.UDP是无连接,发端退出,收端没有任何影响
    2.UDP发送数据上限,最好不要超过1500个字节
    3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失

5.wireshark  抓包工具

  操作流程:
    1.sudo wireshark
      打开wireshark抓包工具
    2.选择抓取数据包的网卡
      any
    3.执行通信的代码
    4.停止通信
    5.设定过滤条件
        ip.addr == IP地址 
        udp 
        tcp 
        udp.port == 端口

6.UDP包头长度:8个字节

    源端口号(2个字节)
    目的端口号(2个字节)
    长度(2个字节)
    校验和(2个字节)文章来源地址https://www.toymoban.com/news/detail-842135.html

到了这里,关于网络中UDP编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第三天-UDP编程练习题(物联技术666)

    网盘链接:https://pan.baidu.com/s/1TKdHdeuDI8XPaakepvSLZQ?pwd=1688  提取码:1688 利用UDP实现双人不同机器聊天(服务器可以被多人连接,显示多人聊天记录) //-------------------------服务器 #include string.h #include sys/types.h #include sys/socket.h #include unistd.h #include netinet/in.h #include stdio.h #include stdlib

    2024年02月02日
    浏览(57)
  • lv8 嵌入式开发 网络编程开发 21 私有云盘项目

    目录 1云盘项目简介 2 项目实现 2.1 首先实现TCP客户端、服务端 2.2 实现客户端函数简化 2.3 实现服务端函数简化 2.4 TCP数据连包现象 2.5 封装send函数和recv函数 2.6 建立readme说明 2.7 实现文件传输 2.8 读取配置文件种的ip、端口号,通过argv[1]参数实现文件传输 3 最终项目  常见的

    2024年02月08日
    浏览(52)
  • 【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

            Qt 网络模块为我们提供了编写TCP/IP客户端和服务器的类。它提供了较低级别的类,例如代表低级网络概念的 QTcpSocket,QTcpServer 和 QUdpSocket,以及诸如 QNetworkRequest, QNetworkReply 和 QNetworkAccessManager 之类的高级类来执行使用通用协议的网络操作。它 还提供了诸如QNet

    2024年02月16日
    浏览(57)
  • lv7 嵌入式开发-网络编程开发 13 UNIX域套接字

    目录 1 UNIX 域流式套接字 2 UNIX 域数据报套接字 UNIX 域流式套接字(UNIX domain stream socket)是一种在同一台主机上的进程之间进行通信的机制。它不依赖于网络协议栈,而是使用文件系统作为通信的基础。 UNIX 域流式套接字提供可靠的、双向的、面向连接的通信方式。与传统的

    2024年02月07日
    浏览(49)
  • C++嵌入式编程:硬件控制与物联网

    C++是一种功能强大的编程语言,被广泛应用于嵌入式系统的开发和物联网(IoT)应用程序的编写。C++具有高性能、灵活性以及强大的硬件控制能力,使其成为嵌入式编程和物联网开发的理想选择。在本文中,我们将讨论C++在硬件控制和物联网应用中的重要性、应用领域以及一

    2024年01月16日
    浏览(61)
  • lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构

    目录 1 TCP/IP协议族体系结构 1.1 OSI与TCP/IP 1.2 TCP/IP 的体系结构  1.3 TCP/IP 体系结构的另一种表示方法 1.4 沙漏计时器形状的 TCP/IP 协议族 2 五层协议的体系结构 2.1 各层的主要功能  2.2 互联网中客户-服务器工作方式 2.3 同时为多个客户进程提供服务  3 练习 是事实上的国际标

    2024年02月07日
    浏览(68)
  • 【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

    1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全双工 支持总线挂载多设备(一主多从) 1.2 硬件连接 多NSS独立片选方式 菊花

    2024年02月16日
    浏览(67)
  • 【嵌入式学习】网络通信基础-项目篇:简单UDP聊天室

    源码已在GitHub开源:0clock/LearnEmbed-projects/chat 客户端功能: 上线发送登录的用户名[yes] 发送消息和接收消息[yes] quit退出 服务器端功能: 统计用户上线信息,放入链表中[yes] 接收用户信息并给其他用户发送消息[yes] 服务器也支持给所有用户群发消息[yes] 接收下线提醒

    2024年01月25日
    浏览(64)
  • 对比纯软开与嵌入式硬件开发谁更好呢?

    你的纠结和犹豫是理解的,职业选择确实是一个重要的决策。我明白你在嵌入式和软件开发之间犹豫不决的原因。让我给你提供一些建议,帮助你做出更明智的决定。最近很多小伙伴找我,说想要一些嵌入式学习资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包