找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3286|回复: 1
打印 上一主题 下一主题
收起左侧

树莓派串口TCP透传

[复制链接]
跳转到指定楼层
楼主
ID:313227 发表于 2018-4-21 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
此代码用于解决有些朋友想通过树莓派连接单片机,并和单片机双向数据透传,电脑或者手机均可以通过tcp的方式连接到树莓派并直接与单片机通信。完整工程请下载附件,进入debug目录make即可
/*
============================================================================
Name        : test.c
Author      : Zhitao Lyu
Version     :
Copyright   : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "sys/types.h"
#include "sys/stat.h"
#include <dirent.h>
//#include<sys/socket.h>
#include "common.h"

int accept_cmd(int fd_tcp,int fd_serial,struct sockaddr_in *addr_ser)
{
        socklen_t sin_size = sizeof(struct sockaddr_in);
        struct sockaddr_in add_cli;
        socket_t sockfd_Cli=0;
        unsigned char recvline[BuffSize+1]="";
        int n=0;
        bzero(&add_cli,sizeof(add_cli));
        sockfd_Cli=accept(fd_tcp, (struct sockaddr *)(&add_cli), &sin_size);
        printf("Accept from IP: %s\n",inet_ntoa(add_cli.sin_addr));
        while(1)//per buff
        {
                n=recv_nb(sockfd_Cli,recvline,BuffSize);
                if(n>0){
                        writeserial(fd_serial, recvline, n, NULL);
                }
                else if(n==0)sleepms(10);
                else if(n<0)break;//end connection
           n=readserial(fd_serial,recvline, BuffSize, NULL);
           if(n>0) send(sockfd_Cli,recvline,n,0);
        }
        bzero(&add_cli,sizeof(add_cli));
        return 0;
}
int main(int argc,char *argv[]) {
        int err=0;
        int fd_tcp=0;
        int Port=5221;
        struct sockaddr_in addr_ser;

        int fd_serial=0;
        if(argc>1)
        {
                Port=atoi(argv[1]);
                if(Port<1024)
                        Port=5221;
        }

        fd_tcp=opentcpserver(&addr_ser,Port);
        if(fd_tcp==-1){
                printf("open tcpsever err\n");
                return 0;
        }
        else{
                printf("Start Listening,Port=%d\r\n",Port);
        }
        //open serial

        fd_serial=   openserial(SERIAL_PATH);
    if(fd_serial==-1)
    {
            close(fd_tcp);
            printf("openserial err msg:%d\r\n",err);
        return 0;
    }
    err=setserial(fd_serial,4,8,'n',1);//9600 8 n 1
    if(err==-1)
    {
            close(fd_tcp);
            close(fd_serial);
            printf("setserial err msg:%d\r\n",err);
        return 0;
    }

        while(1)
        {
                err=accept_cmd(fd_tcp,fd_serial,&addr_ser);
                if(err==8)break;
                printf("Accept msg:%d\n",err);
        }
        close(fd_tcp);
        close(fd_serial);
        printf("Bye!\r\n");
        return 0;
}


CoreControler_Single.zip

127.27 KB, 下载次数: 23, 下载积分: 黑币 -5

树莓派串口tcp透传

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:511468 发表于 2019-4-13 20:11 | 只看该作者
感谢大佬贡献,下载用用,帮顶。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表