windows编程,实现串口通讯

发送方程序:

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

int main() {
    ofstream outfile("output.txt");
    if (!outfile) {
        cerr << "无法打开输出文件" << endl;
        return 1;
    }

    string message = "Hello, Serial Port!";
    outfile << message;
    outfile.close();

    HANDLE hComm = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hComm == INVALID_HANDLE_VALUE) {
        cerr << "无法打开串口" << endl;
        return 1;
    }

    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hComm, &dcbSerialParams)) {
        cerr << "无法获取串口状态" << endl;
        CloseHandle(hComm);
        return 1;
    }

    dcbSerialParams.BaudRate = CBR_9600;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;

    if (!SetCommState(hComm, &dcbSerialParams)) {
        cerr << "无法设置串口参数" << endl;
        CloseHandle(hComm);
        return 1;
    }

    DWORD bytesWritten;
    if (!WriteFile(hComm, message.c_str(), message.size(), &bytesWritten, NULL)) {
        cerr << "无法写入数据" << endl;
        CloseHandle(hComm);
        return 1;
    }

    CloseHandle(hComm);
    return 0;
}

接收方程序:

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

int main() {
    ifstream infile("input.txt");
    if (!infile) {
        cerr << "无法打开输入文件" << endl;
        return 1;
    }

    string message;
    getline(infile, message);
    infile.close();

    HANDLE hComm = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hComm == INVALID_HANDLE_VALUE) {
        cerr << "无法打开串口" << endl;
        return 1;
    }

    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hComm, &dcbSerialParams)) {
        cerr << "无法获取串口状态" << endl;
        CloseHandle(hComm);
        return 1;
    }

    dcbSerialParams.BaudRate = CBR_9600;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;

    if (!SetCommState(hComm, &dcbSerialParams)) {
        cerr << "无法设置串口参数" << endl;
        CloseHandle(hComm);
        return 1;
    }

    DWORD bytesRead;
    string receivedMessage;
    while (ReadFile(hComm, &receivedMessage[0], receivedMessage.size(), &bytesRead, NULL) && bytesRead > 0) {
        receivedMessage.resize(bytesRead);
    }

    cout << "接收到的数据: " << receivedMessage << endl;

    CloseHandle(hComm);
    return 0;
}