读取后 COM 端口无法写入
COM port won't write after reading
我是C++和COM端口的新手,我花了几天时间试图理解这篇文章,这篇文章一页又一页地让我不知所措。我只想得到一个基本的,简单的例子运行,呼叫和回答。
我正试图让一个"客户端"C++应用程序通过COM端口连接将数据发送到"服务器",然后让"服务器"通过同一端口回复。这可能是一个阻塞操作,所以除非我需要,否则我不会陷入重叠或线程之类的问题,这些问题甚至让我难以想象。但这个片段是我目前在"服务器"中拥有的内容的一部分:
UInt8 InputBuffer[2000];
UInt8 value = 130;
UInt8 * intBuffer = &value;
DWORD BytesRead, BytesWritten;
cout << "Trying to read in listen mode" << endl;
ReadFile(SerialHandle, InputBuffer, 1, &BytesRead, NULL);
cout << "Read " << BytesRead << " bytes; will try to write back" << endl;
if (!WriteFile(SerialHandle, intBuffer, 1, &BytesWritten, NULL)) {
cout << "Error writing this content." << endl;
} else {
cout << "Wrote back " << BytesWritten << " bytes" << endl;
cout << "With error: " << GetLastError() << endl;
}
以下是串行端口句柄设置(此处为"COM6",使用虚拟COM端口的其他应用程序中为"COM7"):
SerialHandle = CreateFile(
L"COM6",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
0,
NULL);
两个应用程序的DCB设置也是相同的,因此波特率等应该匹配。
我被卡住了,因为我认为SerialHandle设置正确。ReadFile(...)
工作,下面的cout
打印的正是我所期望的。但是,WriteFile
尝试之后的if ... else
报告它写回了0个字节,但有0个错误。
为什么它读而不写?如果我错过了一些基本的东西,很抱歉,但我花了好几天的时间试图让这个简单的东西发挥作用,现在却失去了理智。作为健全性检查,我在C#中有一个工作版本,但我一辈子都无法在C++中工作。
两种应用程序的DCB设置也是相同的,因此波特率等应与匹配
不一定。如果使用GetCommState()
,则应用程序会受到端口上已配置的设置的影响,而这两个端口上的设置可能不相同。
因此,我建议不要使用GetCommState()
,而是自己设置所有参数。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 从 COM 对象快速读取西里尔字母
- 如何通过按回车键退出通过COM端口读取条形码?
- COM 端口C++读取0xFF
- IStream COM 读取到缓冲区,然后通过 winsock 发送
- 带虚拟COM端口的USB串行设备-如果使用带USB路径的CreateFile(),则ReadFile()读取零字节
- 设置com类的数组会触发读取访问
- USB串行虚拟COM端口:读取不工作,但写入工作
- 使用tserial.cpp驱动程序读取COM端口时的延迟
- 读取 COM 端口数据C++
- 读取后 COM 端口无法写入
- 如何使用 boost 从 com 端口读取未定义的字节数
- 尝试使用 c++ 从 com 端口读取写入数据
- 使用 C++ 从 COM 端口读取文件时出错
- 读取阻塞模式从com端口rs232
- c++程序在读取COM端口时冻结
- 使用 C++ 从 COM 端口读取输出数据