/*

* @Author: Robin

* @Date: 2020-02-20 17:38:31

* @LastEditors: Robin

* @LastEditTime: 2020-02-21 12:55:25

* @Description: 虚拟串口,仅适用与Linux/Mac

*/

package main

import (

"flag"

"fmt"

"log"

"os"

"sync"

"github.com/creack/pty"

"golang.org/x/crypto/ssh/terminal"

)

var wg sync.WaitGroup

func main() {

// 处理启动参数

num := flag.Int("num", 1, "serial number")

flag.Parse()

for i := 0; i < *num; i++ {

pty1, t1, err := pty.Open()

if err != nil {

log.Fatalln(err)

}

terminal.MakeRaw(int(t1.Fd())) // 设置为Raw模式,防止控制字符丢失

pty2, t2, err := pty.Open()

if err != nil {

log.Fatalln(err)

}

terminal.MakeRaw(int(t2.Fd())) // 设置为Raw模式,防止控制字符丢失

go tty1(t1, t2, pty1, pty2)

go tty2(t1, t2, pty1, pty2)

fmt.Println("Virtual Serial Port:", t1.Name(), "<===>", t2.Name())

}

wg = sync.WaitGroup{}

wg.Add(1)

wg.Wait()

}

// 串口1

func tty1(tty1, tty2, pty1, pty2 *os.File) {

var n int

var err error

buf := make([]byte, 1024)

for {

n, err = pty1.Read(buf)

if err != nil {

log.Fatalln(tty1.Name(), "Read Error", err.Error())

}

_, err = pty2.Write(buf[:n])

if err != nil {

log.Fatalln(tty2.Name(), "Write Error", err.Error())

}

}

}

// 串口2

func tty2(tty1, tty2, pty1, pty2 *os.File) {

var n int

var err error

buf := make([]byte, 1024)

for {

n, err = pty2.Read(buf)

if err != nil {

log.Fatalln(tty2.Name(), "Read Error", err.Error())

}

_, err = pty1.Write(buf[:n])

if err != nil {

log.Fatalln(tty1.Name(), "Write Error", err.Error())

}

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

go开发虚拟串口服务器,vspd.go相关推荐

  1. 推荐微软Windows 8 Metro应用开发虚拟实验室

    Kevin Fan分享开发经验,记录开发点滴 推荐微软Windows 8 Metro应用开发虚拟实验室 2012-07-19 05:23 by jv9, 1940 阅读, 4 评论, 收藏, 编辑 微 ...

  2. C#开发 虚拟翻书软件

    C#开发 虚拟翻书软件 翻书算法,C#图形算法. 模拟真实的翻书效果和声音. 支持图片和视频等素材.

  3. 虚拟串口VSPD破解版 亲测win10 64可用

    虚拟串口VSPD破解版 亲测win10 64可用 点击下载

  4. 串口服务器控制协议,可二次开发的串口服务器——上海卓岚

    可二次开发串口服务器 发布时间:2013-02-11 作者:上海卓岚 浏览量:5236 1.什么是可二次开发串口服务器 普通的串口服务器是一种TCP/IP到串口的透明数据转发的转换器,对于不同的应用, ...

  5. 虚拟串口 VSPD for window 7/8

    前言 最近在试着用C#写串口助手,而电脑上有没有可用的端口, 各种百度得知了虚拟串口VSPD,于是到百度下载了一个. 由于使用的是win8,破解版不可用,便用了试用版,14天过去了, 想卸载了重新安装 ...

  6. 给iPhone开发虚拟定位是否真的违法???

    昨天,我发了一篇<郑重提醒:开发这玩意真的犯法,已经有程序员被抓了!>的文章,里面有一个表达不太恰当的地方我更正一下:判决之前应该叫涉嫌违法,不能叫违法.新闻中相关人员是被依法批准逮捕,目 ...

  7. 虚拟串口服务器 源代码,进行ARM开发调试用的开源虚拟串口软件(有源代码)

    好用的开源虚拟串口软件,有源代码,超值.安装方法见压缩包内的ReadMe.txt. ComEmulDrv serial port bridge driver ===================== ...

  8. 如何使用 OpenCV 开发虚拟键盘

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 介绍 OpenCV 是最流行的计算机视觉任务库,它是用于机器学习. ...

  9. 怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

    「谁用激光雷达,谁完蛋!」 在去年特斯拉举办的 Autonomy Day 上,特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达. 「昂贵的传感器是不必要的,这就像是一大堆昂贵的附属品.」 「 ...

最新文章

  1. leetcode算法题--调整数组顺序使奇数位于偶数前面
  2. Summation Order
  3. JavaScript匿名函数以及在循环中的匿名函数
  4. linux docker导入镜像,Docker镜像的导入和导出
  5. electron 打包后 __static_electron开发客户端注意事项(兼开源个人知识管理工具“想学吗”)...
  6. pcf8563c语言程序,PCF8563驱动程序(C语言版)
  7. pythongui项目实例_python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例...
  8. 人脸识别7-人脸图片相似度
  9. HTML——1.Sublime快捷键、HTML常用标签
  10. JavaScript中的文档碎片
  11. linux怎么踢普通用户,Linux系统管理员踢用户的方法
  12. 如何查看云服务器的磁盘空间大小?
  13. 支持同步的Todo软件
  14. 【Java】23 函数式编程
  15. [转]一个人生活,如何摆脱孤独提升幸福感?
  16. 考研英语单词-近义词分类-Second Day
  17. 解决ERROR 1109 (42S02): Unknown table 'xxx' in MULTI DELETE
  18. ## 微信web开发者工具网络连接失败解决办法,基本百分百成功
  19. MySQL数据库关于read_rnd_buffer_size参数
  20. 淘宝API应用调用官方买家信息数据

热门文章

  1. PS出现“不能完成存储为命令,因为没有足够的内存RAM” 设置性能时“要求96和8之间的整数。已插入最接近的数值”
  2. Scratch(三):跳一跳
  3. 利用photoshop cs5新增功能之“智能填充
  4. Newstart HA进阶
  5. 分销商城系统开发应用概述详解
  6. 信奥一本通2071题
  7. C#使用iTextSharp合并pdf,添加页码
  8. JS获取json子项/数组的个数/长度
  9. 底层啊底层,你究竟是什么?
  10. PS安装出现浏览器或操作系统不支持以及需要登录的处理方式