资源简介
串口转TCP组件 (Ubuntu、openwrt实测可用),采用C语言编写,单文件,可直接编译。
同时包含python的服务器端。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include //标准输入输出定义
#include //标准库函数定义
#include //UNIX标准函数定义
#include //基本系统数据类型
#include //获取一些文件相关的信息
#include //文件控制定义
#include
#include //错误号定义
#include //标准输入输出定义
#include //标准函数库定义
#include //Unix标准函数定义
#include
#include
#include //文件控制定义
#include //POSIX中断控制定义
#include //错误号定义
#include
#include
// #define DEST_PORT 9999 //目标地址端口号
// #define DEST_IP “61.153.226.170“ /*目标地址IP,这里设为本机*/
// #define DEST_IP “101.6.65.194“ /*目标地址IP,这里设为本机*/
// #define MAX_DATA 256 //接收到的数据最大程度
#define serial_device “/dev/ttyS1“
struct thread_info{
int sockfd;
int fd;
char* buff;
};
//打开串口
int open_port(void)
{
int fd; //串口的标识符
//O_NOCTTY用来告诉Linux这个程序不会成为“控制终端”
//O_NDELAY用来告诉Linux这个程序不关心DCD信号
fd = open(serial_device O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
//不能打开串口
perror(“open_port: Unable to open /dev/ttyS0 -“);
return (fd);
}
else
{
fcntl(fd F_SETFL 0);
printf(“open ttys1 .....\n“);
return (fd);
}
}
void set_speed_and_parity(int fd int speed)
{
struct termios options; // 串口配置结构体
tcgetattr(fd &options); //获取当前设置
bzero(&options sizeof(options));
options.c_cflag |= B115200 | CLOCAL | CREAD; // 设置波特率,本地连接,接收使能
options.c_cflag &= ~CSIZE; //屏蔽数据位
options.c_cflag |= CS8; // 数据位为 8 ,CS7 for 7
options.c_cflag &= ~CSTOPB; // 一位停止位, 两位停止为 |= CSTOPB
options.c_cflag &= ~PARENB; // 无校验
//options.c_cflag |= PARENB; //有校验
//options.c_cflag &= ~PARODD // 偶校验
//options.c_cflag |= PARODD // 奇校验
options.c_cc[VTIME] = 6; // 等待时间,单位百毫秒 (读)。后有详细说明
options.c_cc[VMIN] = 0; // 最小字节数 (读)。后有详细说明
tcflush(fd TCIOFLUSH); // TCIFLUSH刷清输入队列。
tcsetattr(fd TCSANOW &options); // TCSANOW立即生效;
}
int serialport()
{
int fd;
//打开串口
if ((fd = open_port()) < 0)
{
perror(“open_port error“);
return 0;
}
//设置波特率和校验位
set_speed_and_parity(fd 115200);
return (fd);
}
void Ser2TCP(int sockfd int fd char *buff)
{
int nread;
while (1)
{
//读取串口
nread = read(fd buff 128);
if (nread > 0)
{
// printf(“nLen %dn\n“ nread);
buff[nread + 1] = 0;
// printf(“n%s\n“ buff);
// TCP发送数据
send(sockfd buff nread 0);
}
else
{
sleep(1);
}
}
}
void Ser2TCP_thread(void *Tinfo){
Ser2TCP(((struct thread_info *)Tinfo)->sockfd ((struct thread_info *)Tinfo)->fd((struct thread_info *)Tinfo)->buff);
}
void TCP2Ser(int sockfd int fd char *buff)
{
int nread;
while (1)
{
// TCP 接收数据
sleep(1);
nread = recv(sockfd buff 1024 0); //将接收数据打入buf,参数分别是句柄,储存处,最大长度,其他信息(设为0即可)。
// printf(“TCP nLen %dn\n“ nread);
//写回串口
write(fd buff nread);
}
}
void TCP2Ser_thread(void *Tinfo){
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1114 2018-07-26 08:33 README.md
文件 5417 2018-07-26 08:32 tcpclient.c
文件 495 2018-07-26 02:08 tcpclient.py
文件 721 2018-07-26 02:09 tcpserver.py
相关资源
- 飞秋基于c语言实现
- VC++ MFC MSCOMM VS2010 手把手学会串口收发
- Linux串口操作RS232-C++
- 串口通讯编程支持RS232-RS485通讯协议
- STC12c4052ad AD程序
- MFC对话框动态接收数据插入List列表并
- tcp udp 底层c++封装类windows和linux
- RS232串口通信C++
- 基于串口温度采集程序及源代码
- 简易版的QT5实现RS232通信
- VC++ 串口调试助手源代码
- VC++ 向指定串口发送和接收数据可十六
- Visual C++串口通信
- 基于MFC的串口编程,实现两个计算机
- STM32F103ZET6 按键串口 发16进制[字符串
- VC实现TCP数据包发送(挺好的源代码)
- MFC程序开发之聊天室客户端+服务器源
- TCP一对多通信_基于MFC多线程
- tcp socket实现单进程单线程 高并发服务
- (转)VC老版主薄荷用VC++6.0写的TCP
- c语言tcp服务器端程序代码
- IP TCP UDP校验和计算
- 基于vc6.0串口调试助手源码
- 读取串口数据并画出曲线图的VC++程序
- 简单的MFC串口通讯 源代码
- 完全用API构成的串口串试助手VC6源码
- 串口通信C++源代码
- MFC基于TCP/IP协议的聊天室源代码 (继
- 服务端Node.js和VC++程序间通过SOCKET通信
- C++ Serialport 串口通信类
评论
共有 条评论