linux下udp编程实现接收和发送图片文件

【计算机网络原理】【C语言】用UDP协议实现文件传输 本程序在 Windows 7 Visual Studio 2015 和 Linux Ubuntu 15.04 GCC 5.11 下均编译运行测试通过。 本程序支持 Windows 和 Linux 之间传送文件,如果要在 Windows 和 Linux 之间传送文件,文件名不能出现中文。 本程序支持无线 WiFi,支持 USB 收发器,但仅支持局域网内传送文件,传送文件需要输入对方的 IP 地址... 阅读详情

今天采用udp协议实现接收和发送图片文件,图片格式是bmp。

udp提供面向事务的简单不可靠信息传送服务,具有较好的实时性,它是一种无连接的传输层协议,工作效率比TCP高,先介绍一下udp编程的步骤。

udp客户端:

1 、创建socket套接字

2 、配置ip port 

3 、sendto()发送信息

4 、close()关闭套接字

udp服务端:

1、 创建socket套接字

2 、配置ip port 

3 、setsockopt()取消端口绑定限制(可选)

4 、bind()绑定ip port

5 、recvfrom()接收信息

6 、close()关闭套接字

头文件:

#ifndef _HEAD_H
#define _HEAD_H

#include <stdio.h>        

#include <sys/types.h>         //socket所需头文件
#include <sys/socket.h>

#include <sys/socket.h>  //ip 地址转换所需头文件
#include <netinet/in.h>
#include <arpa/inet.h>   //htonl  htons 所需的头文件

#include <string.h>   //memset 所需头文件
#include <unistd.h>  //write read 所需头文件

#include <stdlib.h>	//malloc 所需头文件

#include <sys/stat.h>  //open 所需头文件
#include <fcntl.h>

#endif

客户端:

#include "head.h"


int main(int argc,char *argv[])
{
	
	if(argc<3)
	{
		//如  ./client 192.168.8.62 8888 /mnt/hgfs/Vms/a.bmp 
		printf("传参少了,你应该输入 ./main ip port bmp\n");

		return -1;
	}
	
	int client_fd;
	
	struct sockaddr_in dest_addr;
 
	//创建套接字	
	client_fd = socket(AF_INET,SOCK_DGRAM,0); //UDP
	if(client_fd == -1)
	{
		printf("create endpoint failed\n");
			
		return -1;
	}
	
	//配置参数
	dest_addr.sin_family = AF_INET;
	dest_addr.sin_addr.s_addr = inet_addr(argv[1]);
	dest_addr.sin_port = htons(atoi(argv[2])); 
	
	int dest_len=sizeof(dest_addr);
	
	//发送信息
	while(1)
	{

		int ret;
		int bmp_fd;
		int bmp_size;
		char *buf;
		
		//定位图片
		bmp_fd=open(argv[3],O_RDWR);
		if(bmp_fd==-1)
		{
			perror("open bmp failed!\n");
			return -1;
		}
		//将读写位置移到文件尾
		bmp_size=lseek(bmp_fd,0,SEEK_END);
		//printf("bmp_size is:%d\n",bmp_size);
		
		//为bmp_size申请堆空间
		buf=malloc(bmp_size);
		//将文件指针偏移到开头
		lseek(bmp_fd,0,SEEK_SET);
		
		//将图片大小读出,放在buf中
		read(bmp_fd,buf,bmp_size);
		//printf("bmp_size is:%d\n",bmp_size);
		
		//发送图片大小
		ret=sendto(client_fd,buf,bmp_size,0,(struct sockaddr *)&dest_addr,dest_len);
		printf("ret is:%d\n",ret);
		if(ret == -1)
		{
			perror("Sendto ");
            return -1;
		}
		else
			break;
        	
		close(bmp_fd);
	}
		
		
	//记得关闭套接字
	close(client_fd);
	

	return 0;
}

服务端:

​
​
#include "head.h"


int main(int argc,char*argv[])
{
	if(argc<3)
	{
		//如 ./server 192.168.8.62 8888 
		printf("传参少了,你应该输入 ./main ip port\n");
		return -1;
	}
	
	int server_id;
	int bind_id;
	
	struct sockaddr_in server_addr,from_addr;
	
	//创建套接字
	server_id=socket(AF_INET,SOCK_DGRAM,0);
	if(server_id == -1)
	{
		perror("Create server_id failure");
		return -1;
	}
	
	//配置参数
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr =  inet_addr(argv[1]);	//ip
	server_addr.sin_port = htons(atoi(argv[2]));	//port
	
	int len=sizeof(struct sockaddr_in);
	
	//取消端口绑定限制
	int opt = 1;
    if(setsockopt(server_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0)
	{
        perror("setsockopt error");    
    } 
	
	//绑定
	bind_id=bind(server_id,(struct sockaddr *)&server_addr,len);
	if(bind_id == -1)
	{
		perror("Create bind_id failure");
		return -1;
	}else
		printf("Bind Success\n");
	
	
	//接收信息
	int from_len=sizeof(from_addr);
	
	int bmp_fd;
	int ret;
	char buf[10000];	
	bmp_fd=open("/home/lgl/test.bmp",O_CREAT|O_RDWR|O_TRUNC);
	if(bmp_fd==-1)
	{
		printf("create bmp failed!\n");
		return -1;
	}
	ret=recvfrom(server_id,buf,10000,0,NULL,&from_len);
	
	printf("ret is:%d\n",ret);
	write(bmp_fd,buf,ret);
	
	close(bmp_fd);
		
	
	//关闭套接字
	close(server_id);
	
	return 0;
}

​

​
Linux 下V4l2摄像头采集图片,实现yuyv转RGB,RGB转BMP,RGB伸缩,jpeglib 库实现压缩RGB到内存中,JPEG经UDP发送功 最近自己所在小组做了一个智能家居xi'tong 阅读详情

相关推荐

【UDP+v4L2】UDP编程+v4L2框架实现Linux下视频实时传输

因为前面查询到Read buffers是0,所以说明我的这款摄像头不支持基于缓冲区的数据传输方式,所以使用基于内存映射的数据传输方式。用于后面在mobaxterm上通过SSH连接Ubuntu,从而实现在windows上命令行操作Ubuntu,免得切来切去麻烦。我是通过网线连接的,没找到网卡驱动;设置的开发板ip是临时ip,每次复位或重新上电需要更新设置ip。Ubuntu自带一个编译器,就是日常用的gcc命令,但是这个编译器是针对 X86 架构的。串口通信:我用的mobaxterm软件,设置如下。

weixin_43998552的博客 2265

UDP实时图像传输

使用C#窗体在两台PC上分别创建一个图像发送端和一个图像接收端,发送端采集摄像头图像,压缩为JPEG格式后使用UDP发送至接收端,接收端接收图像并进行显示。

白鸟无言的博客 2万+

等保2.0下可信验证的动态实现与合规实践

本文深入解读等保2.0标准中的“可信验证”要求,并重点探讨其动态实现与合规实践。文章阐述了从可信根、信任链到动态验证的核心概念,拆解了不同安全等级的实施差异,并提供了从硬件选型、软件赋能到平台集成的四步落地指南。通过行业案例与避坑心得,为构建覆盖计算环境、区域边界、通信网络和安全管理中心的全链条可信防御体系提供了实用参考。

d3e4f的博客 827

java用udp传输一个图片_Udp实现消息的发送和接收、以及图片的上传

importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.net.DatagramPa...

weixin_39656206的博客 808

sophgo sdk v23.03.01

C/C++程序建议在x86主机上使用交叉编译工具链编译生成可执行文件后,再拷贝到SoC目标平台运行。# 创建docker用户组,若已有docker组会报错,没关系可忽略。对于SoC模式,模型转换也需要在docker开发容器中完成;docker开发容器的配置参照前述章节相关内容。6、创建docker容器并进入Docker。# docker命令免root权限执行。# 将当前用户加入docker组。# 重启docker服务。# 安装 docker。3、安装docker。7、SoC 环境配置。

weixin_40723768的博客 913

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

python使用udp分包传输图像数据

python使用udp分包传输图像数据

weixin_42854045的博客 2601

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1135

linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示

linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示

linxizi0622的博客 1515

MCAL中MCU的配置

MCAL配置中MCU配置,PLL计算配置,系统时钟以及各模块参数配置

dhyw12399999的博客 3794

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1209

UDP接收发送图片

1、编写客户/服务器程序,客户端Client.java使用DatagramSocket对象将数据包发送到服务器,请求获取服务器端的图像,服务器端Server.java将图像文件包装成数据包,并使用DatagramSocket对象将该数据包发送到客户端。首先将服务器端的程序编译通过,并运行起来,等待客户的请求。 [code="java"] public class UDPServerExamp...

zhourrr1234的专栏 1901

MFC Tab Control控件完全指南:从基础使用到高级定制

本文详细介绍了MFC中TabControl控件的使用方法和高级技巧。主要内容包括:1) TabControl基础属性设置与绑定;2) 样式定制和外观自定义;3) 创建派生类实现扩展功能;4) 动态页面管理和子对话框控制;5) 高级功能如标签拖拽排序和右键菜单。通过完整代码示例,展示了从基本应用到复杂场景的实现方案,包括多标签页管理、自定义绘制、动态添加/删除标签等核心功能,为MFC开发者提供了全面的TabControl开发指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 257

linux系统发送图片,linux下udp编程实现接收和发送图片文件

今天采用udp协议实现接收和发送图片文件,图片格式是bmp。udp提供面向事务的简单不可靠信息传送服务,具有较好的实时性,它是一种无连接的传输层协议,工作效率比TCP高,先介绍一下udp编程的步骤。udp客户端:1 、创建socket套接字2 、配置ip port3 、sendto()发送信息4 、close()关闭套接字udp服务端:1、 创建socket套接字2 、配置ip port3 、se...

weixin_35075144的博客 674

第六天 界面操作及美化(6.4 使用GUI 套件)

本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。

weixin_38637405的博客 407

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Linux C++ udp按包发送接收图片

我最近写一个项目的时候需要涉及到udp传输图片,udp发送速度快,但易丢包,而发送图片过程中丢包将导致图片无法打开,因此需要对包进行处理,并每收到一包回复一个标志位,保证正确接收每一包。 Linux c++ udp按包发送接收文件 服务端代码 Package.h #ifndef __PACKAGE_H__ #define __PACKAGE_H__ #include <string.h> #include <iostream> using namespace std; struct

qq_44269651的博客 2317

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

基于Linux用C语言实现TCP/UDP图片和文件传输(socket)

目录一、TCP实现1.服务端2.客户端二、UDP实现1.服务端2.客户端 一、TCP实现 传输控制协议(TCP,Transmission Control Protocol) 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。 1.服务端

qq_39768922的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux环境下 通过V4L2读取视频+UDP发送图片文件

linux 开发板 基于V4L2 + UDP 进行摄像头数据读取并发送

linxizi0622的博客 2058

基于Socket编程下 实现Linux-Linux、Linux-Windows udp通信

在虚拟机下开启俩个终端,分别运行服务器和客户端程序(服务器运行在前,客户端运行在后)①客户端 Windows_Client。②服务器 Linux_Server。⑤接收客户端发送过来的数据。⑤接收客户端发送过来的数据。②Sockets初始化信息。若需程序源码可在评论区留言。⑤接收服务器发过来的消息。⑥接收服务器发过来的消息。③指定IP地址与端口号。③指定IP地址和端口号。③指定IP地址与端口号。④指定IP地址和端口号。

Bit_Dong的博客 1705

Linux:UDP和TCP报头管理

1、报头和有效载荷是如何进行分离的?? 2、有效载荷应该交付给上层的那一个协议呢?(协议字段、方案) 3、认识报头的组成 4、学习协议的周边知识

weixin_51142926的博客 5459

【Linux网络】UDP Socket 编程全解析:从回显服务到通用字典服务,从零实现工业级代码

在 Linux 网络编程体系中,TCP 与 UDP 是传输层两大核心协议。TCP 凭借面向连接、可靠传输的特性,成为文件传输、HTTP 通信、金融交易等场景的首选;而 UDP 以无连接、低延迟、轻量高效的设计,在直播推流、实时游戏、DNS 解析、物联网数据上报等实时性优先的场景中,有着不可替代的地位。很多初学者对 UDP 的认知,往往停留在「不可靠传输」的标签上,却没有真正吃透其编程模型、核心 API 的设计细节,以及工业级代码的封装思想。本文将从 UDP 协议的核心特性出发,从零实现V1 版本 UDP 回

会当凌绝顶,一览众山小 2301

Linux软件编程:UDP通信与Wireshark抓包调试技术

UDP通信简单高效,适合对实时性要求高、允许少量丢包的场景。通过Linux套接字编程,我们可以快速实现UDP客户端/服务器。而Wireshark作为抓包利器,能直观呈现网络协议细节,是调试网络程序的必备工具。理解UDP协议头部和编程接口,结合抓包分析,可以深入掌握网络通信原理。

senijusene的博客 691

linux网络编程 -- tcp和udp通信的简单实现

懒得写摘要

m0_60292931的博客 1990

Qt使用udp的Broadcast实现广播图片

目录   基础以及演示 源码如下 基础以及演示 关于UDP的基础博文 Qt文档阅读笔记-QUdpSocket基本表述及简单实现 https://blog.youkuaiyun.com/qq78442761/article/details/85258574   Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析 htt...

IT1995的博客 5418

【Linux网络编程】传输层协议 - UDP

传输层协议UDP,UDP的协议端格式、UDP的特点、UDP的面向数据报、UDP的缓冲区、UDP的注意事项、基于UDP的应用层协议

2301_80277275的博客 1097

Linux C/C++之TCP / UDP通信

Linux/C语言实现TCP/UDP普通通信以及文件传输(最详细的步骤)

ShiXiAoLaNga的博客 6605
上一篇: 冒泡排序和选择排序算法的实现
下一篇: 实现linux的ls命令
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值