IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 北醒双舵机体积检测系统TCP通信 使用例程(windows系统) -> 正文阅读

[网络协议]北醒双舵机体积检测系统TCP通信 使用例程(windows系统)

? ??北醒光子推出一款激光雷达体积检测系统,内部集成了北醒TF系列不同量程的激光雷达,可用于三维重建、料位、煤堆、粮仓等目标体积检测,具体细节可参考官网。

????????体积检测系统作为下位机,采用TCP通信,为client端,IP默认为192.168.0.7,端口为23;与体积测量系统连接的主控系统为上位机,为server端,IP默认要求为192.168.0.201,端口为23。本例中使用笔记本电脑电脑作为上位机与体积测量单元相连接。

????????以下为windows环境下采用C++编写的体积测量单元使用例程,供使用者参考。

#include <iostream>
#include <Winsock2.h>
#include <WS2tcpip.h>
#pragma comment (lib, "ws2_32")

class TCP_Server {
public:
    SOCKET sock_Server, sock_Client;
    SOCKADDR_IN serv_Addr_Local, serv_Addr_remote;

    TCP_Server()
    {
//========================================================================================
//load socket
//========================================================================================
        WORD w = MAKEWORD(2, 2);
        WSADATA wsa;
        if (WSAStartup(w, &wsa) != 0)
        {
            std::cout << "1:winsock load error\n";
        }
        else
        {
            std::cout << "winsock load OK\n";
        }

//========================================================================================
//create socket
//========================================================================================
        serv_Addr_Local.sin_family = AF_INET;
        serv_Addr_Local.sin_port = htons(23);

        serv_Addr_Local.sin_addr.S_un.S_un_b.s_b1 = 192;
        serv_Addr_Local.sin_addr.S_un.S_un_b.s_b2 = 168;
        serv_Addr_Local.sin_addr.S_un.S_un_b.s_b3 = 0;
        serv_Addr_Local.sin_addr.S_un.S_un_b.s_b4 = 201;

        sock_Server = socket(AF_INET, SOCK_STREAM, 0);

        if (sock_Server == SOCKET_ERROR)
        {
            std::cout << "2:failed to create socket\n";
        }
        else
        {
            std::cout << "create socket OK\n";
        }
    }

//========================================================================================
//Bind
//========================================================================================
    void Bind(void)
    {
        if (bind(sock_Server, (LPSOCKADDR)&serv_Addr_Local, sizeof(serv_Addr_Local)) == SOCKET_ERROR)
        {
            std::cout << "3:failed to bind\n";
        }
        else
        {
            std::cout << "bind OK\n";
        }
    }

//========================================================================================
//Listen
//========================================================================================
    void Listen(SOCKET sock_Server, int backlog)
    {
        if (listen(sock_Server, 10) == SOCKET_ERROR)
        {
            std::cout << "4:failed to listen\n";
        }
        else
        {
            std::cout << "listen OK\n";
        }
    }

//========================================================================================
//receive
//========================================================================================
    int Recv(SOCKET sock_Server, char* data)
    {
        int end = recv(sock_Server, data, 1024, 0);
        data[end] = '\0';
        return end;
    }

//========================================================================================
//send
//========================================================================================
    void Send(SOCKET sock_Server, char* data)
    {
        send(sock_Server, data, strlen(data), 0);
    }
};

int main()
{
    char recData[1024];

    TCP_Server tcp_server = TCP_Server();

    char version[4] = { 0x5A, 0x04, 0x01, 0x5F };
    char startMeasure[4] = { 0x5A, 0x04, 0x13, 0x71 };

    tcp_server.Bind();                                  //bind
    tcp_server.Listen(tcp_server.sock_Server, 10);      //listen
    //accept
    int serv_Addr_Addr_remote_len = sizeof(tcp_server.serv_Addr_remote);
    tcp_server.sock_Client = accept(tcp_server.sock_Server, (SOCKADDR *)(&tcp_server.serv_Addr_remote), &serv_Addr_Addr_remote_len);

    if (tcp_server.sock_Client == INVALID_SOCKET)
    {   printf("accept error!\n");  }
    else
    {
        printf("acception is OK \n");
        printf("The client address is :");
        //show the address of the client
        printf("%d.", tcp_server.serv_Addr_remote.sin_addr.S_un.S_un_b.s_b1);
        printf("%d.", tcp_server.serv_Addr_remote.sin_addr.S_un.S_un_b.s_b2);
        printf("%d.", tcp_server.serv_Addr_remote.sin_addr.S_un.S_un_b.s_b3);
        printf("%d ", tcp_server.serv_Addr_remote.sin_addr.S_un.S_un_b.s_b4);
        printf("\n");
    }

//========================================================================================
//get version
//========================================================================================
    tcp_server.Send(tcp_server.sock_Client, version);
    int num = tcp_server.Recv(tcp_server.sock_Client, recData);
    if ( num == 0 )
    {   printf("get version failed \n");    }
    else
    {
        printf("version is: ");
        printf("%d.", *(recData + 5));
        printf("%d.", *(recData + 4));
        printf("%d ", *(recData + 3));
        printf("\n");
    }
    
//========================================================================================
//start measure
//========================================================================================
    tcp_server.Send(tcp_server.sock_Client, startMeasure);

    while (true)
    {
        int num = tcp_server.Recv(tcp_server.sock_Client, recData);
        if (num == 0)
        {   printf("No data \n"); break;    }
        
        for (int i = 0; i < num; i++)
        {
            printf("%-4d ", *(recData + i));
        }
        printf("\n");
    }

    closesocket(tcp_server.sock_Client);
    closesocket(tcp_server.sock_Server);
    WSACleanup();
}

? ? 执行结果如下:

?

? ??图中显示TCP连接正常;获取体积检测单元IP地址为192.168.0.7,体积检测单元版本为1.0.38;体积单元开始进行扫描且回传扫描结果,扫描结果包含扫描范围点云数据及体积计算结果(图中只包含部分点云数据,没有显示体积计算结果)。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:45:12  更:2021-09-02 11:45:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:35:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码