UDP编程实例

使用UDP协议通讯时服务器端和客户端无需建立连接,只要知道对方套接字的地址信息,就可以发送数据。服务器端只需创建一个套接字用于接收不同客户端发来的请求,经过处理后再把结果发送给对应的客户端。
服务器端和客户端使用UDP的流程如下图示:

服务器端代码

/*****server.c*****/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 128int main(int argc, char *argv[]){int sockfd;struct sockaddr_in servaddr, cliaddr;socklen_t peerlen;char[BUFFER_SIZE];if(argc < 3){printf("Usage: %s <ip> <port>\n",argv[0]);exit(-1);}if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){       //建立socket连接perror("socket");exit(-1);}print("sockfd = %d\n",sockfd);//设置sockaddr_in结构体中相关参数bzero(&servaddr,szieof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(atoi(argv[2]));servaddr.sin_addr.s_addr = inet_addr(argv[1]);if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){   //bind()绑定地址信息perror("bind");exit(-1);}printf("bind success!\n");peerlen = sizeof(cliaddr);        while(1){       //调用recvfrom()函数接收客户端发送的数据if(recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, &peerlen) < 0){perror("recvfrom");exit(-1);}printf("Received a message: %s\n",buf);strcpy(buf, "Welcome to server");sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr, peerlen);}close(sockfd);exit(0);
}

客户端代码

/*****client.c*****/
//头文件同server.c
#define BUFFER_SIZE 128int main(int argc, char *argv[]){int sockfd;char buf[BUFFER_SIZE] = "Hello Server";struct sockaddr_in servaddr;if(argc < 3){printf("Usage: %s <ip> <port>\n",argv[0]);exit(-1);}if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){      //创建socketperror("socket");exit(-1);}//设置sockaddr_in结构体中相关参数bzero(&servaddr,szieof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(atoi(argv[2]));servaddr.sin_addr.s_addr = inet_addr(argv[1]);sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));    //发送消息给服务器端if(recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL) < 0){perror("recvfrom");exit(-1);}printf("Recv from server: %s\n",buf);close(sockfd);exit(0);
}

运行时先启动服务器端,再启动客户端

linux@linux-virtual-machine:~/andy/net$ ./server 192.168.1.100 9999
listenfd = 3
bind success!
Listening...
Received a message: Hello Server
linux@linux-virtual-machine:~/andy/net$ ./client 192.168.1.100 9999
Recv from server: Welcome to server

关注我的公众号,共同交流学习嵌入式开发相关技术:

Linux网络编程|UDP编程实例相关推荐

  1. 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)

    菜鸟学习笔记:Java提升篇10(网络2--UDP编程.TCPSocket通信) UDP编程 TCP编程(Socket通信) 单个客户端的连接 多个客户端的连接(聊天室案例) UDP编程 在上一篇中讲 ...

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

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

  3. Linux网络原理与编程——第十一节 网络基础及套接字

    目录 一.网络的层状划分结构 二.网络发展史 三.协议 四.OSI七层结构模型 五.TCP/IP四层(五层)协议结构模型 六.局域网中通信原理初识 封包.解包.分用.mac帧 七.跨网络通信原理初始 ...

  4. Java网络编程UDP编程

    一. 简单先介绍一下网络编程 1. 概念 : 通过网络IP连接起来,实现网络通信,数据传输的操作,就是网络编程 2. 实现 : 目前来说当前主要有两种实现的方法,TCP和UDP: 其中TCP需要划分客 ...

  5. [linux] Linux网络之Socket编程入门

    目录 1. 前言 2. 网络基础 2.1 协议 2.1.1 TCP和UDP协议 2.2 网络的层状结构 2.3 一台主机向另一台主机的发送数据的流向 2.4 IP和MAC地址 2.5 端口 2.6 网 ...

  6. 网络编程——TCP网络编程UDP编程

    1.计算机网络:将分布在不同区域不同地方的多台计算机和网络设备通过线程连接起来组成一套大型系统,来实现计算机之间的信息传递和资源共享的设备. 2.网络编程:编写一个程序来实现网络间信息传递. 网络编程 ...

  7. Java TCP/UDP编程

    java TCP & UDP编程 UDP编程 TCP编程 UDP编程 UPD: User Datagram Protocol.面向无连接,不安全. UDP中,发送方无需知道接收方是否接受,只考 ...

  8. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  9. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  10. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

最新文章

  1. 我在不炎熱也不抑鬱的秋天,依然不抽煙
  2. 【开发环境】为 Visual Studio Community 2013 版本安装中文语言包 ( 安装 Test Agents 2013 | 安装 Visual Studio 2013 简体中文 )
  3. jsp获取连接池的实时连接数_PHP进阶教程-实现一个简单的MySQL连接池
  4. wpf click事件在触摸屏上点击第一次没反应_你的PLC和你的触摸屏为什么总是通讯不上?...
  5. Qt的槽可以使用默认参数
  6. pll制作分频器_PLL学习过程记录
  7. linux 下/proc/cpuinfo三级缓存,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  8. 本地未安装Oracle数据库,如何连接远程Oracle数据库
  9. 项目中的常量是放在接口里还是放在类里呢?
  10. IEEE的论文哪里可以下载?
  11. element树形控件拖拽allow-drop控制
  12. MySQL 的 max_allowed_packet
  13. “道可道,非常道”——千年孤独话老子
  14. 全志T507-屏幕触摸旋转,取消光标小技巧说明-飞凌嵌入式知识库
  15. ftp上传工具 绿色,4个好用的绿色 ftp上传工具
  16. border渐变 ios_iOS一个方法搞定view渐变色
  17. Vitamio直播框架的简单使用
  18. 范文网站服务器配置,服务器配置与管理论文范文怎么写(2)
  19. 有趣的HTML实例(二) 404页面
  20. 按照100分制,90分以上成绩为A,80到90为B, 60到80为C,60一下为D,写一个程序, 当用户输入分数,自动转换为ABCD的形式打印,Python三种解决方法

热门文章

  1. bat脚本中怎么注释命令行
  2. android中TextView属性之autoText解析
  3. grub4dos 引导linux,Grub4dos系统引导
  4. ECRS分析原则(转载)
  5. java实现斐波那契数列
  6. np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别
  7. 短链接生成接口、长链接转换短链接,可根据ip归属地个性化跳转、随机跳转
  8. 本科蓝色学术论文答辩PPT模板
  9. ASP.NET在Web窗体上输出九九乘法表
  10. LaTeX入门——如何独立排版出一篇期刊论文