C语言实现UDP通信

2023-05-16

UDP通信

UDP是一种无连接的尽最大努力交付的不可靠连接,通信之前无需先建立连接,自然而然,通信之后也就无需再释放连接。

通信的套接字

UDP所采用的通信接口与前面讲过的TCP通信接口相同,只是没有建立连接这一步。
socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOCK_DGRAM。sendto()用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端口)。recvfrom()接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。
recvfrom()可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客
户端的数据

通信流程

在这里插入图片描述
在这里插入图片描述

通信过程

客户端


#include <stdio.h>

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);
	assert( sockfd != -1 );

	struct sockaddr_in saddr;
	memset(&saddr,0,sizeof(saddr));
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(6000);
	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	while( 1 )
	{
	char buff[128] = {0};
	printf("input:\n");

	fgets(buff,128,stdin);

	if ( strncmp(buff,"end",3) == 0 )
	{
		break;
	}

	sendto(sockfd,buff,strlen(buff),0,(struct ckaddr*)&saddr,sizeof(saddr));
	memset(buff,0,128);

	int len = sizeof(saddr);
	recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);

	printf("buff=%s\n",buff);
	}

	close(sockfd);

}

服务器端

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);
	assert( sockfd != -1 );

	struct sockaddr_in saddr,caddr;
	memset(&saddr,0,sizeof(saddr));
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(6000);
	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
	assert( res != -1 );

	while( 1 )
	{
		int len = sizeof(caddr);
		char buff[128] = {0};
		recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
		printf("ip:%s,port:%d,buff=%s\n",inet_ntoa(caddr.sin_addr), ntohs(caddr.sin_port),buff );

		sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr));
	}

	close(sockfd);
}

END!请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实现UDP通信 的相关文章

  • 是否可以在 socket.io 中使用 UDP?

    我正在开发一款游戏 听说 UDP 更适合实时游戏 我知道 socket io 使用 TCP 并且想知道是否有某种方法可以将其切换到 UDP 我尝试查找它 但只找到了 2012 年左右的帖子 其中说 UDP 仅在浏览器中处于实验阶段 从标准浏
  • Golang编写的UDP客户端无法接收来自服务器的消息

    我写了一个Java客户端 它向广播地址发送消息 我还编写了一个Java服务器 它接受所有发送的消息并将消息发送回客户端 现在我想尝试在 Go 中做同样的事情 只是为了获得一些经验 服务器工作正常 正在接收消息并对 Java 客户端做出响应
  • GCDAsyncUDPSocket源地址返回null

    谷歌代码问题镜像 https groups google com forum topic cocoaasyncsocket grhjZSMLr3U https groups google com forum topic cocoaasync
  • UDP 服务器套接字缓冲区溢出

    我正在 Linux 上编写 C 应用程序 我的应用程序有一个 UDP 服务器 它在某些事件上向客户端发送数据 UDP 服务器还接收来自客户端的一些反馈 确认 为了实现这个应用程序 我使用了一个 UDP 套接字 例如int fdSocket
  • Spark Scala UDP 在侦听端口上接收

    中提到的例子http spark apache org docs latest streaming programming guide html http spark apache org docs latest streaming pro
  • 简单的udp代理解决方案

    我正在寻找可以代理我的 udp 数据包的解决方案 我有一个客户端向服务器发送 udp 数据包 它们之间的连接非常糟糕 导致大量数据包丢失 一种解决方案是使用一个新的代理服务器 它将所有数据包从客户端重定向到目标服务器 新的代理服务器与这两个
  • 我应该使用哪个高级 API 来管理 iOS 上的 UDP 套接字? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在章节 使用套接字和流 https developer apple com library mac d
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 错误的 UDP 校验和没有效果:为什么?

    我正在尝试测试 UDP 程序 如果它接收到 UDP 校验和错误的数据 会发生什么情况 奇怪的是 它似乎没有任何效果 并且有效负载被成功接收 至少在 OS X 上是通过环回接口成功接收的 下面是一个示例 其中使用以下方式发送数据SOCK RA
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • HTTP 是否使用 UDP?

    这可能是一个愚蠢的问题 HTTP 是否使用过用户数据报协议 例如 如果使用 HTTP 传输 MP3 或视频 它内部是否使用 UDP 进行传输 From RFC 2616 http www ietf org rfc rfc2616 txt 通
  • 如何监听任意端口的广播包?

    使用 NET 如何在任何端口上侦听发送到 255的udp广播数据包 而不需要绑定到特定端口 我自己找到了办法 它是这样工作的 mainSocket new Socket AddressFamily InterNetwork SocketTy
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 我刚刚在哪个适配器上收到此 UDP 数据包?

    我正在尝试用 C 编写一个 BOOTP 服务器 我正在接收并解析来自客户端的 BOOTP 数据包 我需要回复我的服务器 IP 地址 问题是 计算机可以有多个网络适配器 客户端还没有 IP 地址 有什么方法可以查出 UDP 数据包是在哪个适配
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1

随机推荐

  • 【MySQL|Bug】MySQL Workbench意外退出(M1 Mac)

    文章目录 系统环境报错如下解决方法 系统环境 MacBook Pro M1macOS 13 2 1 报错如下 解决方法 更换可用的版本 xff0c 如8 0 29
  • 【Ubuntu|Bug】解决 fatal error: filesystem: No such file or directory

    将 include lt filesystem gt 改为 xff1a span class token macro property span class token directive hash span span class toke
  • 【QT-ROS Bug】解决 error: ui_main_window.h

    问题分析 从 QT4 改为 QT5 时出现如下报错 xff1a home xxx ws qt src qtgui qtgui include qtgui main window hpp 17 error ui main window h N
  • 【嵌入式面试】2022年嵌入式经典面试题汇总(C语言)

    x1f4dc 作者 xff1a 不想脱发的基兄 x1f4fa 专栏 xff1a 嵌入式面试 x1f4e3 格言 xff1a 不管前方的路有多苦 xff0c 只要走的方向正确 xff0c 不管多么崎岖不平 xff0c 都比站在原地更接近幸福
  • Linux下的UDP通信

    上一部分大致提了一下UDP通信要用到的API xff0c 下面就要开始实际测试了 xff0c 先搞服务端 xff0c 再搞客户端 Linux环境下的UDP TCP网络通信API接口函数 abs ln 1 43 NaN 的博客 CSDN博客
  • 【嵌入式面试】2022年嵌入式经典面试题汇总(网络编程)

    x1f4dc 作者 xff1a 不想脱发的基兄 x1f4fa 专栏 xff1a 嵌入式面试 x1f4e3 格言 xff1a 天空黑暗到一定程度 星辰就会熠熠生辉 前言 2022年秋招我面试嵌入式MCU开发方向 xff0c 经过了多场的笔试与
  • MDK-ARM与STM32CubeMX软件的下载及安装

    一 STM32CubeMX 的下载及安装 第一步 xff1a 下载应用软件 1 1 软件下载地址 xff1a www st com stm 32 cubemx 1 2 JAVA开发环境的搭建 xff0c JAVA下载地址 xff1a www
  • STM32 HAL库的中断(一)外部中断&&UART中断

    STM32 HAL库的中断 可以说大型任务里面逃不掉中断的使用 xff0c 在从标准库开发转向HAL库开发的过程中 xff0c HAL库函数层层调用的函数关系着实令人头皮发麻 xff0c 在此记录一下自己一下午的摸索 xff0c 本文将持续
  • Jetson Nano使用Tensorrt加速Yolo V4-tiny进行实时检测

    之前在Darknet下使用Yolo V4 tiny进行了图像实时检测的测试 xff0c 发现帧率一直只有十几 xff0c 还有很大的提升空间 xff0c 今天就来尝试一下使用tensorrt进行加速后的效果 基础环境 Jetson Nano
  • gazebo如何加载sdf文件的模型

    目录 大致过程sdf文件包含在world文件设置sdf文件的路径1 把文件直接放到能被gazebo找得到的目录下2 设置环境变量使gazebo能找到该文件3 在package xml文件添加路径 参考文献留有疑问 大致过程 gazebo只能
  • 串口应用:发送数据

    功能描述 xff1a 1 每隔3ms以115200波特率的速度发送一个遵循uart协议的数据 每次发送数据增大1 xff08 从0开始即可 xff09 2 数据 来自数据采集器 xff0c 每采集一个数据 xff0c 发送一个脉冲告知串口
  • github更新子模块指令

    span class token function git span submodule update init recursive 更新子模块
  • ..\OBJ\LED.axf: Error: L6218E: Undefined symbol xTaskGetSchedulerState (referred from delay.o).

    文章目录 前言解决办法 前言 在学习FreeRTOS移植后 xff0c 编译出现 OBJ LED axf Error L6218E Undefined symbol xTaskGetSchedulerState referred from
  • STM32中HAL库与标准库的区别

    这是扒的某网站上大佬们的见解 1 HAL库就是封装的比较猛 xff0c 移植性比较强 xff0c 标准库就是将寄存器封装好 xff0c 移植性没有HAL好 2 HAL库可以用ST的软件CUBE生成初始化工程 3 HAL库最方便的就是可以用C
  • 在vsCode中如何使用git工具来管理代码

    git add git status 显示文件的状态 git commit m 我是内容 需要工具 xff1a VSCode 在VSCode官网上下载VSCode并进行安装 VSCode官方网站 https code visualstudi
  • TCP 可靠性的关键机制 —— 确认应答机制 (ACK)

    确认应答机制是 实现TCP可靠性的关键机制 xff0c 简单来说 xff0c 确认应答机制就是 xff0c 客户端和服务端任意一方 xff0c 在发送消息之后 xff0c 都必须要收到对方的回复来表明自己发送的消息已经被对方收到 TCP可靠
  • Ubuntu20.10编译安装Python3.8

    1 更新软件包列表并安装构建Python所需的软件包 xff1a sudo apt update sudo apt install build essential zlib1g dev libncurses5 dev libgdbm dev
  • VINS-Fusion-RGBD编译错误

    error 39 SHAPE CROSS 39 is not a member of 39 cv 39 error 39 SHAPE RECT 39 is not a member of 39 cv 39 error 39 TERMCRIT
  • win10 WSL2 AirSim 仿真环境搭建

    win10 WSL2 AirSim 仿真环境搭建 wsl2AirSim安装教程基本环境安装WSL2安装PX4 编译环境配置好默认的工具链下载编译PX4 安装AirSim环境安装虚幻引擎下载AirSimLandscapeMountains下载
  • C语言实现UDP通信

    UDP通信 UDP是一种无连接的尽最大努力交付的不可靠连接 xff0c 通信之前无需先建立连接 xff0c 自然而然 xff0c 通信之后也就无需再释放连接 通信的套接字 UDP所采用的通信接口与前面讲过的TCP通信接口相同 xff0c 只