首页 > 其他分享 >v831-T113-c-udp发送篇

v831-T113-c-udp发送篇

时间:2023-07-31 15:14:47浏览次数:52  
标签:sockaddr v831 struct err iAddrLen int udp T113 printf

又来分析udp,目标是从v831中获取到的图片信息发送给t113然后再屏幕上显示出来

挫折一

t113作为服务端,再接收到客户端发来的数据后会自动设置clinetaddr,那么我们就不再需要取从新aton这个ip地址了,直接使用clientaddr

int udp_send(void)
{
	// if (0 == inet_aton("192.168.1.118", &tSocketClientAddr.sin_addr)){
	// 	printf("invalid server_ip\n");
	// 	return -1;
	// }
	// printf("aton\n");
    iAddrLen = sizeof(struct sockaddr);
    iRecvLen = sendto(iSocketServer, "ok", 3, 0,
										 (struct sockaddr *)&tSocketClientAddr, iAddrLen);
    if (iRecvLen < 0)
    {
        printf("send error \n");
		return -1;
    }
	// printf("send\n");
    return 0;
}

int udp_rec(unsigned char *ucRecvBuf)
{
	int size;
    iAddrLen = sizeof(struct sockaddr);
    iRecvLen = recvfrom(iSocketServer, ucRecvBuf, 240*240*3, 0, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
    if (iRecvLen > 0)
    {
        ucRecvBuf[iRecvLen] = '\0';
        printf("Get Msg From %s : \n", inet_ntoa(tSocketClientAddr.sin_addr));
		for(size=0;size<iRecvLen;size++)
		{
			printf("%x",ucRecvBuf[size]);
		}
    }
    else{
        return -1;
    }
    return 0;
}

挫折二

sendto,这个函数再tcp中是会自动拆分的,因为最大数据包的问题,不可能全部数据一贞发送完,但是再udp中就不会自动拆分,所以在程序中我们应该手动拆分帧。根据百度的结果最大数据长度为:

int upd_send()
{
	int iSocketClient;
	struct sockaddr_in tSocketServerAddr;
	struct sockaddr_in tSocketClientAddr;

	libmaix_err_t err;

	
	int iRet;
	unsigned char ucSendBuf[1000];
	int iSendLen;
	int iAddrLen;

	printf("\r\nsize is %d\r\n",cam->fram_size);
	iSocketClient = socket(AF_INET, SOCK_DGRAM, 0);

	tSocketServerAddr.sin_family      = AF_INET;
	tSocketServerAddr.sin_port        = htons(SERVER_PORT);  /* host to net, short */
 	//tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;
 	if (0 == inet_aton(ip_add, &tSocketServerAddr.sin_addr))
 	{
		printf("invalid server_ip\n");
		return -1;
	}
	memset(tSocketServerAddr.sin_zero, 0, 8);
	err = cam->start_capture(cam);
	if(err != LIBMAIX_ERR_NONE){
		printf("start capture fail: %s\n", libmaix_get_err_msg(err));
		return -1;
	}
	while (1)
	{
		err = cam->capture_image(cam,&img);
		if(err != LIBMAIX_ERR_NONE)
        {
            // not ready, sleep to release CPU
            if(err == LIBMAIX_ERR_NOT_READY)
            {
                usleep(20 * 1000);
                continue;
            }
            else
            {
                printf("capture fail: %s\n", libmaix_get_err_msg(err));
                break;
            }
        }
		iAddrLen = sizeof(struct sockaddr);
		printf("data size is %d\r\n",sizeof(img->data));
		iSendLen = sendto(iSocketClient, img->data,65507, 0,
								(const struct sockaddr *)&tSocketServerAddr, iAddrLen);
		if (iSendLen <= 0)
		{
			close(iSocketClient);
			return -1;
		}
		while(( recvfrom(iSocketClient, ucSendBuf, 999, 0, (struct sockaddr *)&tSocketClientAddr, &iAddrLen))<=0);
		if(strcmp(ucSendBuf,"ok"))
		{
			printf("no ok \n");
			printf("%s\n\n",ucSendBuf);
			close(iSocketClient);
			break;
		}
		printf("ok \n");
	}

	return 0;
}

 

标签:sockaddr,v831,struct,err,iAddrLen,int,udp,T113,printf
From: https://www.cnblogs.com/recodemo/p/17593438.html

相关文章

  • v831-c-yolov2例程解析
    没错,自从把ubuntu搞坏之后无奈把之前的例程全删了,因此所有的笔记都没了,又得从新分析一遍main函数先从最简单的main分析此函数主要创建一个屏幕句柄用来显示,然后调用nn_test来开始yolov2的操作,并且传入画布,显示等都在里面操作,最后跳出来后摧毁屏幕nn_test函数此函数很长,一点......
  • v831-c-编译环境部署篇
    学了一遍又学回来了,整理整理v831的环境吧头文件这些头文件上面部分是在python里面在编译成可执行文件之前会创造出来的,不用理他下面则是components里面的,需要在.vscode里面设置一下路径这样基本上就可以了,其他的我们不再vscode里面一键操作,就不设置了工具链路径工具链的路......
  • t113-c-framebuffer-画点篇
    本来今天是要结合udp的例子传输数据的,但是被一个数学逻辑搞了半天,记录一下避坑吧。代码#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include"linux/fb.h"#include<sys/ioctl.h>#include<sys/mman.h>#include<......
  • t113-c-udp篇
    之前学习了tcp发送数据,但是效果很不理想,那么试一下用udp会怎么样,学习一下udp是怎么用用的吧看例子例子是在百问网下载的,serverclient这个有点奇怪,有点看不懂#include<sys/types.h>/*SeeNOTES*/#include<sys/socket.h>#include<string.h>#include<sys......
  • java udp 广播地址
    实现JavaUDP广播地址简介在Java中,我们可以使用UDP协议进行网络通信。UDP是一种无连接的协议,它可以实现快速的数据传输,适用于实时性要求较高的场景。广播是一种UDP的应用场景,它可以将一条消息发送给同一网络中的所有设备。本文将指导刚入行的开发者实现JavaUDP广播地址的功能。......
  • TCP和UDP的区别以及各自的应用场景
    TCP和UDP区别:1.连接TCP是面向连接的传输层协议,传输数据前先要建立连接。UDP是不需要连接的,即刻就可以传输数据。2.服务对象TCP是一对一的两点服务,也就是说一条连接只有两个端点。UDP支持一对一,一对多,多对多的交互通信。3.可靠性TCP是要保证可靠交付数据的,数据无差错,不丢失......
  • TCP | UDP
    TCP三次握手第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(SynchronizeSequenceNumbers)。第二次握手:服务器收到syn包并确认客户的SYN(ack=j+1),同时也发送一个自己的SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三......
  • linux服务器性能调优(udp为主)
    udp的好处很明显,效率高,减少了建立连接的流程,减少了报文头的占比,也减少了维护连接的开销。缺点就是不稳定,会丢包。还有就是由于udp的高效,导致用于udp的一些应用开发,并发都比较大,更容易丢包。io复用SO_REUSEADDRSO_REUSEPORT创建listener用来监听数据时,有时候需要配置io复用。也......
  • matlab用udp发数据,python接受数据
    用UDP在Matlab中发送数据,Python中接收数据在科学研究和工程领域中,数据的传输和通信是非常重要的。在实际应用中,我们经常需要在不同的编程语言之间传输数据。本文将介绍如何在Matlab中使用UDP协议发送数据,并在Python中接收这些数据。UDP协议简介用户数据报协议(UDP)是一种无连接的......
  • 网络编程 p5 UDP编程
    UDP网络通信编程基本介绍类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。DatagramPacket对象封装了UDP数据报,在数据报中包含了发......