开发板(ubuntu系统)通过串口接收数据,并将数据通过网口转发出去

2023-05-16

测试软件windows下串口助手和cmd下的telnet,ubuntu下的minicom.(设置好相应的串口号和端口号)此程序可以正常接收数据。

#include<termios.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<linux/kernel.h>
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/select.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<errno.h>

#define PORT  6666
#define DeviceName "/dev/ttySAC2"
#define DeviceSpeedDef  B115200
#define ParityBitDef  
#define DataBitDef           8
#define StopBitDef           1

char buf[256];
int ComFd;
void SetCom(int fd,int BaudRate,int DateBit,int StopBit)
{
	struct  termios    CmdCfg1,Cmdfg2;
	tcgetattr(fd,&Cmdfg2);
	CmdCfg1=Cmdfg2;
	cfmakeraw(&CmdCfg1);
	CmdCfg1.c_cflag&=~CSIZE;
	cfsetispeed(&CmdCfg1,BaudRate);
	cfsetospeed(&CmdCfg1,BaudRate); //
	CmdCfg1.c_cflag&=~CSIZE;
	CmdCfg1.c_cflag|=CS8;
	CmdCfg1.c_cflag&=~PARENB;          
	CmdCfg1.c_iflag&=~INPCK;

	CmdCfg1.c_cflag&=~CSTOPB;
	CmdCfg1.c_cc[VTIME] = 1;
	CmdCfg1.c_cc[VMIN] = 1;
	tcflush(fd,TCIFLUSH);
	tcsetattr(fd,TCSANOW,&CmdCfg1);
}

int ComRecv(int fd,char *buf,int datelen)
{
			int len,fs_sel;
			fd_set  fs_read;
			struct timeval time;
			FD_ZERO(&fs_read);
            FD_SET(fd,&fs_read);
			time.tv_sec=5;
			time.tv_usec=0;

			fs_sel =select(fd+1,&fs_read,NULL,NULL,&time);
			if(fs_sel)
			{
				len=read(fd,buf,datelen);
				printf("len =%d,fs_sel=%d\n",len,fs_sel);
				return len;
			}
			else 
				return 0;
}

int main(int argc,char *argv[])
{
        int ser_sockfd,cli_sockfd,err,n,addlen;
        struct sockaddr_in ser_addr;
        struct sockaddr_in cli_addr;
	char recvline[200],sendline[200];
	ser_sockfd=socket(AF_INET,SOCK_STREAM,0);
	if(ser_sockfd==-1)
        {
		printf("sockfd error:%s\n",strerror(errno));
      		return -1; 
       }
	bzero(&ser_addr,sizeof(ser_addr));
	ser_addr.sin_family=AF_INET;
	ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        ser_addr.sin_port=htons(PORT);
        err=bind(ser_sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr));
       if(err == -1)
  	{
		printf("bind error:%s\n",strerror(errno));
                return -1;
        }
	err=listen(ser_sockfd,5);
	if(err==-1)
	{
          printf("listen error \n");
	  return -1;
	}	
	printf("listen the port\n");
	pthread_t IDComRecv;
	int ret1;
	int r_count;
	 ComFd = open(DeviceName,O_RDWR|O_NOCTTY);
	 if(ComFd ==-1)
	 {
	    printf("Open Com failed");
	    return 1;
	 }

	 SetCom(ComFd,DeviceSpeedDef,DataBitDef,StopBitDef);
	while(1)
       {      addlen = sizeof(struct sockaddr);
                cli_sockfd=accept(ser_sockfd,(struct sockaddr*)&cli_addr,&addlen);
		if(cli_sockfd==-1)
                {
			printf("accept error\n");
                }
	while(1)
	{      
		r_count = ComRecv(ComFd, buf, sizeof(buf));	
		
		if(r_count)
		{
			for(int i = 0; i < r_count; i++)
			{
				printf("buf[%d] = 0x%x\n", i, buf[i]);
			}
				send(cli_sockfd,buf,strlen(buf),0);		
		}
	}
       close(cli_sockfd);
    } 
  return 0;
}	

 

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

开发板(ubuntu系统)通过串口接收数据,并将数据通过网口转发出去 的相关文章

随机推荐

  • ROS创建自定义msg类型功能包

    ROS创建自定义msg类型功能包 一 创建msg消息 首先创建一个空的package单独存放msg类型 xff08 当然也可以在任意的package中自定义msg类型 xff09 为便于说明 xff0c 建立一个名为base sks msg
  • ROS中geometry_msgs消息类型、nav_msg消息

    ROS中geometry msgs消息类型 nav msg消息 参考 xff1a 链接 https blog csdn net ganbaoni9yang article details 50060343 官方文档 xff1a http d
  • 2011年总结

    又是一年年终时 亦是一年总结时 想想自己从去年写年终总结到现在 已经很久没有写过字了 时间过得真快 又是一年过去了 这一年也是我出来工作的第二年 这一年总体来说自己无论在技术还是心态方面有了很大的进步 记得刚出学校那会 啥都不知道 对于工作
  • 性能监测工具-node-export

    1 前言 无论是做性能测试或是运维等都会用到对服务的监测 xff0c 最基本的监测是就是对服务器的基本指标监测 xff0c 比如 xff1a cpu 内存 I O 网络等 这些其实一般系统自带的都有工具 xff0c 很方便 xff0c 比如
  • VSCode(Visual Studio Code)整合Git

    一 xff1a 初始化git插件 在拓展商店中搜索 git xff0c 在下发出现的列表中 xff0c 选择 Git History xff0c 在右边出现的界面 xff0c 点击 安装 即可 本人已经安装 xff0c 安装按钮已无 xff
  • Ubuntu 当前系统资源查看命令Top详解

    top xff1a 主要参数 d xff1a 指定更新的间隔 xff0c 以秒计算 q xff1a 没有任何延迟的更新 如果使用者有超级用户 xff0c 则top命令将会以最高的优先序执行 c xff1a 显示进程完整的路径与名称 S xf
  • ToString的用法

    ToString的用法 string y 61 x ToString 我才明白把一个类型转换为string类型是啥意思 比如当定义一个int类型后 xff0c 利用toString xff08 xff09 方法就能把int转化为string
  • STM32F4-KeyFIFO

    STM32按键FIFO 主要思想就是 xff1a 1 先配置按键的初始计数值为滤波值 如 xff0c 滤波为40ms xff0c 则配置该值为固定初始值 xff0c 如10 假如扫描周期为10ms xff0c 每间隔一定时间 上面说的10m
  • pid的后2位是无效的 在查询pspcidtable的时候 ExpLookupHandleTableEntry 函数会自动把pid的后两位置成0(Handle.TagBits = 0;就是这句!!)

    PHANDLE TABLE ENTRY ExpLookupHandleTableEntry IN PHANDLE TABLE HandleTable IN EXHANDLE tHandle 43 43 Routine Description
  • 代码分析——基于误差状态卡尔曼滤波器(ESKF)实例分析

    imu gps localization代码分析 最近在学习ESKF相关知识 xff0c 偶然发现知乎大佬 Dongsheng Yang基于 Quaterniond kinematics for the error state Kalman
  • 在ros环境下的amcl配置笔记

    这段时间导师让研究一下amcl xff0c 在这之前只有一点ros基础 xff0c 根本不知道amcl是什么东东 xff0c 于是开始查资料找教程 xff0c 但是真心没有找到面向小白的配置教程 xff0c 在这几天的摸索中 xff0c 终
  • ROS 发布和订阅自定义消息数组

    今天学习使用ros发布和订阅自定义的消息以及消息数组 xff0c 记录 xff0c 备忘 xff01 说明 xff1a 以ubuntu14 04 xff0c indigo版本为例 ros工作空间位置 xff1a workspace catk
  • Ubuntu USB串口数据 读取及显示

    显示串口接受的数据命令 1 1 在终端输入 lsusb 显示所有连接的usb设备 1 2 在终端输入 ls dev ttyA 显示所有连接的虚拟USB设备端口号 1 3 在终端输入 ls dev ttyU 显示所有连接的USB设备端口号 1
  • 单片机学习(四)——ESP8266(最全教程和说明)

    文章目录 前言一 ESP8266可以干什么 xff1f 二 ESP8266作为传输数据的开发 1 电路连接图2 ESP8266直接烧录3 通过Arduino对ESP8266进行烧录三 ESP8266作为开发板的开发四 可能会存在的问题总结
  • VScode怎么修改主题色

    VScode底部点击 设置 按钮 xff0c 点击colorTheme 出来的弹框选项中 xff0c 点击选择合适的主题色即可
  • 初学者PID进阶——在线调整参数

    原文地址 xff1a http brettbeauregard com blog 2011 04 improving the beginner e2 80 99s pid tuning changes 问题The Problem 在系统运行
  • 路由器WiFi天线拆机详解-路由器天线原理

    xff08 本文已经同步到公众号 原创文章 xff0c 转载请与作者联系 xff09 1 前言 xff1a 随着无线通信的发展 xff0c WiFi对我们日常生活工作越来越重要 作为WiFi的载体 路由器 xff0c 也是经常出现在生活的各
  • 以机器人为中心的视觉惯性里程计--RVIO

    有没有大佬能用这个代码发布一个 39 nav msgs Odometry 39 message的 34 odom 34 话题 xff0c 下面是代码的github地址 xff0c 和作者的意见 代码地址 https github com r
  • ubuntu的gazebo无法加载模型的解决办法

    最近在CMU exploration的平台上做仿真实验时 xff0c 出现了无法加载模型的错误 ERROR 1657256347 244258655 3 370000000 Updating ModelState model camera
  • 开发板(ubuntu系统)通过串口接收数据,并将数据通过网口转发出去

    测试软件windows下串口助手和cmd下的telnet xff0c ubuntu下的minicom 设置好相应的串口号和端口号 此程序可以正常接收数据 include lt termios h gt include lt unistd h