【Linux】网络篇三--UDP编程
网络篇三--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);
socket
由socket()
调用返回message/address
:接收/发送的信息length
:信息长度flag
:一般填0struct 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编程相关推荐
- 【Linux】网络篇二--TCP编程
网络篇二--TCP编程 一.TCP编程实现 1.编程步骤 2.socket函数 3.bind函数 4.地址转换函数 5.listen函数 6.accept函数 7.connect函数 8.send函数 ...
- linux下java基于UDP编程聊天_基于Linux下的UDP编程
一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: ? 建立套接字 ? 将套接字地址结构进行绑定 ? 读写数据 ? 关闭套接字 2.客户端 ...
- 计算机快捷键桌布,桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南...
桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南 2020-07-10 11:41:39 153点赞 1107收藏 74评论 哈喽大家好,我是码呆茶!作为一 ...
- Linux基础篇--shell脚本编程基础
Linux基础篇–shell脚本编程基础 本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为 ...
- linux网络编程之socket编程(六)
经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:"真爱生活,珍惜生命",好了,言归正传. ...
- python socket udp_python网络-Socket之udp编程(24)
一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...
- linux网络编程之Socket编程
(1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...
- Linux驱动技术(三) _DMA编程
DMA即Direct Memory Access,是一种允许外设直接存取内存数据而没有CPU参与的技术,当外设对于该块内存的读写完成之后,DMAC通过中断通知CPU,这种技术多用于对数据量和数据传输速 ...
- Linux网络协议栈(三)——网络设备(1)
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征: (1) 作为基于硬件的网络适配器与基于软件的 ...
- C#网络编程之 UDP编程
C# 网络编程 UDP 转载于:https://www.cnblogs.com/miniwiki/archive/2009/07/24/1709833.html
最新文章
- Redis详解(八)------ 主从复制
- QT的QMutableListIterator类的使用
- zigbee 端点描述符
- WPF Application 类介绍以及怎样修改启动方式
- 我记录网站综合系统 -- 技术原理解析[0:简介(代序) 1.7Beta源代码下载开始]...
- IT行业趋势前沿:SOA和开源
- UITableView分页
- html登陆滑动验证,JavaScript实现登录滑块验证
- k均值聚类算法考试例题_k均值算法(k均值聚类算法计算题)
- 关于电路中输入阻抗和输出阻抗大小的讨论
- 状态码406解决方式
- pvs-stdio ue4_云中的PVS-Studio:Azure DevOps
- Linux配置定时任务
- Opencv入门第一课打开窗口
- Windows环境下安装Oracle11g客户端
- 企业邮箱登录入口,企业邮箱在哪登录?邮箱ssl安全吗?
- 编辑python用什么输入法_用Python从0开始实现一个中文拼音输入法!
- 【爬虫】应用Python爬虫爬取豆瓣租房上的帖子信息
- SpringBoot+Vue实现前后端分离的在线考试报名系统
- 一个简单的小游戏——“数字炸弹”的实现
热门文章
- FPN网络和RPN网络介绍
- 等距更纱黑体 T SC regular下载
- 可编程并行接口芯片8255
- 苹果悬浮球_手机轻松实现多个系统!安卓手机运行苹果iOS系统?期待!
- oracle导出数据只能9999,批量快速的导入导出Oracle的数据
- 【MATLAB信号处理】信号波形的产生及系统时域分析
- acm竞赛2016c语言真题,C语言acm竞赛习题集锦.doc
- matlab uicontrol 下标,Matlab Impoint和Uicontrol
- uicontrol_与UIControl结合
- 【Visual C 】游戏开发笔记三十五 站在巨人的肩膀上 游戏引擎导论