网络篇三--UDP编程

  • 一、编程思路
  • 二、编程实现
    • 1、sendto/recvfrom
    • 2、程序实现
  • 三、实验结果

一、编程思路


由于是无连接传输,重点使用recvfrom函数sendto函数实现编程。


二、编程实现

1、sendto/recvfrom

ssize_t sendto(int socket, void *message, size_t length,
int flags, struct sockaddr *dest_addr, socklen_t dest_len);ssize_t recvfrom(int socket, void *buffer, size_t length,
int flags, struct sockaddr *address, socklen_t *address_len);
  • socketsocket() 调用返回
  • message/address :接收/发送的信息
  • length :信息长度
  • flag :一般填0
  • struct sockaddr :存放服务器或客机的端口号与ip地址
  • address_len :地址长度

2、程序实现

sever.c:

/*************************************************************************> File Name: sever.c> Author: xiuchengzhen> CSDN: xiuchengzhen.blog.csdn.net> Created Time: Thu 31 Mar 2022 03:40:52 AM PDT************************************************************************/#include "net.h"int main(int argc, const char *argv[])
{/************socket设置**************/int fd;if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){perror("socket:");exit(-1);}/*********允许绑定地址快速重用**********/int b_reuse = 1;setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));/***********bind设置****************/struct sockaddr_in sin;memset(&sin, 0, sizeof(sin));  //清零sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);
#if 1sin.sin_addr.s_addr = htonl(INADDR_ANY);  //可以接收随机的ip地址
#elseif(inet_pton(AF_INET, SER_ADDR, (void *)&sin.sin_addr) != 1){perror("inet_pton:");exit(-1);}
#endifif(bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0){perror("bind:");exit(-1);}printf("Net bind success!\n");/*********recvfrom************/char buf[BUFSIZE] = {0};  //接收数据储存的地方char client_addr[16] = {0}; //储存客机地址的地方 struct sockaddr_in cin;socklen_t cinlen = sizeof(cin);while(1){bzero(buf, sizeof(buf));if(recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cin, &cinlen) < 0){perror("recvfrom:");continue;}bzero(client_addr, sizeof(client_addr));if(inet_ntop(AF_INET, (void *)&cin.sin_addr, client_addr, sizeof(client_addr)) == NULL){perror("inet_ntop:");continue;}/******打印接收信息******/printf("sever read:%s, client port:%d, client ip:%s\n", buf, ntohs(cin.sin_port), client_addr);if(strncasecmp(buf, USER_QUIT, strlen(USER_QUIT)) == 0) //接收quit退出printf("client port %d,client ip %s choice break!\n", ntohs(cin.sin_port), client_addr);}return 0;
}

client.c:

/*************************************************************************> File Name: client.c> Author: xiuchengzhen> CSDN: xiuchengzhen.blog.csdn.net> Created Time: Thu 31 Mar 2022 05:03:20 AM PDT************************************************************************/#include "net.h"void in_error()  //打印错误信息与输入提示
{printf("Error or no arguments were entered at runtime\n");printf("Please input such as : ./file port ip\n");printf("5000< port <65525\n");exit(-1);
}int main(int argc, const char *argv[])
{if(argc < 3)in_error();int port = atoi(argv[1]);if(port < 5000 || port < 0)in_error();/*********socket地址族***********/int fd;if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){perror("socket:");exit(-1);}/*******sendto********/char buf[BUFSIZE] = {0};struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(port);if(inet_pton(AF_INET, argv[2], (void *)&sin.sin_addr) < 0){perror("inet_pton:");exit(-1);}socklen_t addrlen = sizeof(sin);printf("client ready!\n");while(1){if(fgets(buf, sizeof(buf), stdin) == NULL) //从键盘获取数据{perror("fgets:");continue;}if(sendto(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sin, addrlen) < 0) //发送数据{perror("sendto:");continue;}if(strncasecmp(buf, USER_QUIT, strlen(USER_QUIT)) == 0)  //输入quit退出{printf("client choice break!\n");exit(-1);}}return 0;
}

三、实验结果


到这里就结束啦!

【Linux】网络篇三--UDP编程相关推荐

  1. 【Linux】网络篇二--TCP编程

    网络篇二--TCP编程 一.TCP编程实现 1.编程步骤 2.socket函数 3.bind函数 4.地址转换函数 5.listen函数 6.accept函数 7.connect函数 8.send函数 ...

  2. linux下java基于UDP编程聊天_基于Linux下的UDP编程

    一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: ? 建立套接字 ? 将套接字地址结构进行绑定 ? 读写数据 ? 关闭套接字 2.客户端 ...

  3. 计算机快捷键桌布,桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南...

    桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南 2020-07-10 11:41:39 153点赞 1107收藏 74评论 哈喽大家好,我是码呆茶!作为一 ...

  4. Linux基础篇--shell脚本编程基础

    Linux基础篇–shell脚本编程基础 本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为 ...

  5. linux网络编程之socket编程(六)

    经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:"真爱生活,珍惜生命",好了,言归正传. ...

  6. python socket udp_python网络-Socket之udp编程(24)

    一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...

  7. linux网络编程之Socket编程

    (1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...

  8. Linux驱动技术(三) _DMA编程

    DMA即Direct Memory Access,是一种允许外设直接存取内存数据而没有CPU参与的技术,当外设对于该块内存的读写完成之后,DMAC通过中断通知CPU,这种技术多用于对数据量和数据传输速 ...

  9. Linux网络协议栈(三)——网络设备(1)

    网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征: (1)    作为基于硬件的网络适配器与基于软件的 ...

  10. C#网络编程之 UDP编程

    C# 网络编程 UDP 转载于:https://www.cnblogs.com/miniwiki/archive/2009/07/24/1709833.html

最新文章

  1. Redis详解(八)------ 主从复制
  2. QT的QMutableListIterator类的使用
  3. zigbee 端点描述符
  4. WPF Application 类介绍以及怎样修改启动方式
  5. 我记录网站综合系统 -- 技术原理解析[0:简介(代序) 1.7Beta源代码下载开始]...
  6. IT行业趋势前沿:SOA和开源
  7. UITableView分页
  8. html登陆滑动验证,JavaScript实现登录滑块验证
  9. k均值聚类算法考试例题_k均值算法(k均值聚类算法计算题)
  10. 关于电路中输入阻抗和输出阻抗大小的讨论
  11. 状态码406解决方式
  12. pvs-stdio ue4_云中的PVS-Studio:Azure DevOps
  13. Linux配置定时任务
  14. Opencv入门第一课打开窗口
  15. Windows环境下安装Oracle11g客户端
  16. 企业邮箱登录入口,企业邮箱在哪登录?邮箱ssl安全吗?
  17. 编辑python用什么输入法_用Python从0开始实现一个中文拼音输入法!
  18. 【爬虫】应用Python爬虫爬取豆瓣租房上的帖子信息
  19. SpringBoot+Vue实现前后端分离的在线考试报名系统
  20. 一个简单的小游戏——“数字炸弹”的实现

热门文章

  1. FPN网络和RPN网络介绍
  2. 等距更纱黑体 T SC regular下载
  3. 可编程并行接口芯片8255
  4. 苹果悬浮球_手机轻松实现多个系统!安卓手机运行苹果iOS系统?期待!
  5. oracle导出数据只能9999,批量快速的导入导出Oracle的数据
  6. 【MATLAB信号处理】信号波形的产生及系统时域分析
  7. acm竞赛2016c语言真题,C语言acm竞赛习题集锦.doc
  8. matlab uicontrol 下标,Matlab Impoint和Uicontrol
  9. uicontrol_与UIControl结合
  10. 【Visual C 】游戏开发笔记三十五 站在巨人的肩膀上 游戏引擎导论