C++ 最简单的网络通讯程序客户端和服务端的流程

客户端

1、创建客户端的socket
2、向服务端发起连接请求
3、与服务端通信(可以是发送一个请求报文后等待回复,然后再发起下一个请求报文)
4、关闭socket,释放资源

服务端

1、创建服务端的socket
2、把服务端用于通信的IP和端口绑定到socket上
3、把socket设置为可连接状态(监听)的状态
4、受理客户端的连接请求,如果没有客户端连上来,accept()函数将阻塞等待
5、与客户端通信,接收客户端发送过来的报文,发送回应报文
6、关闭socket,释放资源。(关闭服务端用于监听的socket,和客户端连上来的socket)
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个C++封装modbus tcp的客户服务程序的框架代码,您可以根据自己的需求进行修改和完善。 首先,需要使用第三方库libmodbus,它是一个用于Modbus通讯的开源库。在使用本程序之前,请确保您已经正确安装了该库。 以下是客户的代码: ```cpp #include <iostream> #include <modbus/modbus.h> #include <stdexcept> class ModbusTCPClient { public: ModbusTCPClient(const std::string& ip_address, int port) { ctx = modbus_new_tcp(ip_address.c_str(), port); if (!ctx) { throw std::runtime_error("Failed to create Modbus TCP client."); } } ~ModbusTCPClient() { modbus_close(ctx); modbus_free(ctx); } void connect() { if (modbus_connect(ctx) == -1) { throw std::runtime_error("Failed to connect to Modbus server."); } } void disconnect() { modbus_close(ctx); } void read_registers(int address, int count, uint16_t* dest) { int result = modbus_read_registers(ctx, address, count, dest); if (result == -1) { throw std::runtime_error("Failed to read registers from Modbus server."); } } void write_registers(int address, int count, const uint16_t* src) { int result = modbus_write_registers(ctx, address, count, src); if (result == -1) { throw std::runtime_error("Failed to write registers to Modbus server."); } } private: modbus_t* ctx; }; ``` 以下是服务的代码: ```cpp #include <iostream> #include <modbus/modbus.h> #include <stdexcept> class ModbusTCPServer { public: ModbusTCPServer(int port) { ctx = modbus_new_tcp(NULL, port); if (!ctx) { throw std::runtime_error("Failed to create Modbus TCP server."); } } ~ModbusTCPServer() { modbus_close(ctx); modbus_free(ctx); } void listen(int max_connections) { modbus_tcp_listen(ctx, max_connections); } void accept(modbus_t* slave_ctx) { modbus_tcp_accept(ctx, &slave_ctx); } void close() { modbus_tcp_close(ctx); } private: modbus_t* ctx; }; ``` 使用示例: ```cpp #include <iostream> int main() { try { ModbusTCPClient client("127.0.0.1", 502); client.connect(); uint16_t registers[10]; client.read_registers(0, 10, registers); for (int i = 0; i < 10; i++) { std::cout << "Register " << i << ": " << registers[i] << std::endl; } client.write_registers(0, 10, registers); client.disconnect(); ModbusTCPServer server(502); server.listen(1); modbus_t* slave_ctx = nullptr; server.accept(slave_ctx); server.close(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; return 1; } return 0; } ``` 以上代码仅供参考,具体实现需要根据您的需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值