网口通讯与串口通讯(内含代码)

目录

二、网口通讯与串口通讯主要区别:

三、初始化网口,实现网口通讯的步骤:(附代码)

四、打开串口,实现通讯的步骤:(附代码)

五、工具小助手:


        网口通讯(Ethernet)和串口通讯(Serial)都是用于数据传输的通信协议。

1、网口通信有:TCP(可靠连接)、UDP(无连接)

(1)要设置的:IP地址+端口;

(2)通讯数据帧格式:帧头+长度+数据域+停止位

2、串口通信,是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式;

(1)串口通讯协议包含:RS232(全双工,常用)、RS485(半双工)

(2)要设置的:串口号、波特率(单设这个也行,容易出错)、奇偶校验位、停止位

(3)数据格式:由起始位(1bit)+ 数据位(8bit)+ 奇偶校验位(1bit)+ 停止位(1bit)组成;

(4)主要步骤:打开、设置、读写、关闭;

3、工具小助手:

(1)网口通信:NetAssist.exe;

(2)串口通信:UartAssist.exe

二、网口通讯与串口通讯主要区别:

1. 传输速度:网口通讯速度较快,可以达到几十兆甚至几百兆的传输速度;串口通讯速度较慢,一般只能达到几千字节每秒的传输速度。

2. 传输距离:网口通讯可以通过局域网或广域网进行数据传输,传输距离较远;串口通讯只能在短距离内传输数据,一般不超过几十米。

3. 连接方式:网口通讯使用网线连接,需要路由器或交换机等网络设备进行连接;串口通讯使用串口连接,可以直接连接两台设备。

4. 数据传输方式:网口通讯采用数据包方式进行数据传输,数据包中包含了地址、数据和校验等信息;串口通讯采用逐位传输方式进行数据传输,数据逐位传输,没有数据包的概念。

总的来说,网口通讯适合在大范围内进行数据传输,传输速度快,而串口通讯适合在短距离内进行数据传输,连接简单。在实际应用中,需要根据具体的需求选择适合的通讯方式。

三、初始化网口,实现网口通讯的步骤:(附代码)

1、网口通讯:(以TCP为例)

(1)客户端:

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
    int sockfd;
    struct sockaddr_in servaddr;

    // 服务器地址
    const char* ipaddr = "127.0.0.1";
    int port = 12345;

    // 创建Socket
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket");
        return -1;
    }

    // 设置服务器地址
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = inet_addr(ipaddr);
    servaddr.sin_port = htons(port);

    // 连接服务器
    if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
        perror("connect");
        return -1;
    }

    // 发送数据
    const char* msg = "Hello world";
    int n = write(sockfd, msg, strlen(msg));
    if (n < 0) {
        perror("write");
        return -1;
    }

    // 接收数据
    char buf[1024];
    n = read(sockfd, buf, sizeof(buf));
    if (n < 0) {
        perror("read");
        return -1;
    }
    buf[n] = '\0';
    std::cout << "Received: " << buf << std::endl;

    // 关闭Socket
    close(sockfd);

    return 0;
}

在以上示例代码中,使用了socket函数创建了一个TCP Socket,使用connect函数连接到服务器,使用write函数发送数据,使用read函数接收数据,最后使用close函数关闭Socket。其中,sockaddr_in结构体用于存储服务器地址信息,inet_addr函数将IP地址转换为二进制格式,htons函数将端口号转换为网络字节序。

(2)服务器:

//以下是一个简单的网口通讯的服务端的C++示例:
#include <iostream>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

using namespace std;

int main(int argc, char *argv[]) {
    int server_fd, new_socket, valread;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";

    // 创建socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // 设置socket选项
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
        perror("setsockopt failed");
        exit(EXIT_FAILURE);
    }

    // 绑定IP和端口
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);

    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(server_fd, 3) < 0) {
        perror("listen failed");
        exit(EXIT_FAILURE);
    }

    // 等待客户端连接
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }

    // 接收客户端数据
    valread = read(new_socket, buffer, 1024);
    printf("%s\n", buffer);

    // 发送数据给客户端
    send(new_socket, hello, strlen(hello), 0);
    printf("Hello message sent\n");

    // 关闭socket
    close(new_socket);
    close(server_fd);

    return 0;
}

 运行该程序后,服务端会监听8080端口,并等待客户端连接。当客户端连接成功后,服务端会接收客户端发送的数据,并发送一条“Hello from server”的消息给客户端。最后,服务端会关闭socket。 

四、打开串口,实现通讯的步骤:(附代码)

//以下是一个简单的串口通讯的C++示例代码:

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

using namespace std;

int main()
{
    HANDLE hComm;
    char port[] = "COM1";
    DWORD dwBytesWritten, dwBytesRead;
    char buffer[1024] = {0};

    hComm = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    if (hComm == INVALID_HANDLE_VALUE)
    {
        cout << "Failed to open serial port" << endl;
        return 1;
    }

    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

    if (!GetCommState(hComm, &dcbSerialParams))
    {
        cout << "Failed to get serial port settings" << endl;
        CloseHandle(hComm);
        return 1;
    }

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

    if (!SetCommState(hComm, &dcbSerialParams))
    {
        cout << "Failed to set serial port settings" << endl;
        CloseHandle(hComm);
        return 1;
    }

    while (true)
    {
        if (!ReadFile(hComm, buffer, sizeof(buffer), &dwBytesRead, NULL))
        {
            cout << "Failed to read from serial port" << endl;
            CloseHandle(hComm);
            return 1;
        }

        if (dwBytesRead > 0)
        {
            cout << "Received data: " << buffer << endl;

            if (!WriteFile(hComm, buffer, dwBytesRead, &dwBytesWritten, NULL))
            {
                cout << "Failed to write to serial port" << endl;
                CloseHandle(hComm);
                return 1;
            }
        }
    }

    CloseHandle(hComm);
    return 0;
}

该示例代码打开COM1串口,并设置波特率为9600,数据位为8,停止位为1,无奇偶校验。然后进入一个无限循环,不断从串口读取数据,并将读取到的数据原样发送回去。

需要注意的是,在使用串口通讯时,需要根据实际情况设置正确的串口参数。另外,读写串口数据时需要使用ReadFile和WriteFile函数。

五、工具小助手:

(1)网口通信:NetAssist.exe;

(2)串口通信:UartAssist.exe

  • 11
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可将 TTL/UART 串口设备连接至以太网 支持网口升级程序 支持TCP服务器、TCP客户端、UDP模式 支持虚拟串口、Web登录或使用VirCom进行配置 ZLSN2003 概述 ZLSN2003是上海卓岚开发的新一代串口转以太网嵌入式模块。该模块功能强大,其基本功能是实现串口联网的方便性,即只要和用户的串口TTL电平的串口连接,ZLSN2003就可以将数据发送到基于TCP/IP/UDP的网络服务器上。默认情况下串口和以太网之间是透明传输协议,即串口发送什么,网络就收到什么数据,不会数据格式转化。ZLSN2003内部已经集成网络变压器,外围电路非常简单。 ZLSN2003模块为单片机联网、传统串口设备联网提供了快捷、稳定、经济的方案。不仅能够保证您的产品快速上市,并且为您的产品的稳定提供支撑。 特点 支持在线网络升级固件程序,用户可以从卓岚公司获得软件升级工具和升级firmware,可自行升级到最高版本。 使用配置的ZLVircom工具可以搜索、管理局域网内(支持跨网段搜索)、Internet上的ZLSN2003模块。可一键式配置模块的所有参数。设备配置、管理非常方便。 支持DHCP功能,可以动态获得局域网内的DHCP服务器分配的IP。 支持DNS,自动解析目的域名为IP,目的IP可以为动态域名。 作为TCP Server(TCP服务器端)时,支持独有的100个连接的强大连接能力。 作为TCP Client(TCP客户端)的,支持连接8个目标服务器。作为TCP客户端时,可以在断线后自动进行重连。支持隐含心跳技术,保证网线断线后的恢复。 支持UDP、UDP组播等功能。 支持虚拟串口。 规格 网络界面 以太网 10/100 Mbps 保护 内建1KV电磁隔离 串口界面 界面 TTL电平串口 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 RTS/CTS,DTR/DCR,XON/XOFF 速率 1200bps~460800bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP,DNS,DHCP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7/WIN8 配置方式 Web浏览器、卓岚ZLVirCom、串口类AT命令 电器特性 电压输入 DC5V(ZLSN2003-3.3V支持3.3V),210~250mA 机械特性 尺寸 长×宽=43 × 26mm 工作环境 工作温度,湿度 0~70℃,5~95% RH 储存温度,湿度 -45~165℃,5~95% RH W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值