以太网通讯

接口开发笔记-WebApi-CSDN博客

以太网常用通讯协议

1、modbus tcp

复制代码
using EasyModbus;
using System;
 
class Program
{
    static void Main(string[] args)
    {
        // 创建Modbus客户端实例
        ModbusClient modbusClient = new ModbusClient("192.168.1.100"); // IP地址
        modbusClient.Port = Modbus.Port.TcpPort(502); // Modbus TCP端口,默认是502
        modbusClient.UnitIdentifier = 1; // Modbus单元标识符,根据你的设备设置
 
        try
        {
            // 连接服务器
            modbusClient.Connect();
 
            // 读取保持寄存器,例如从地址0开始的4个寄存器
            ushort[] registers = modbusClient.ReadHoldingRegisters(0, 4);
            Console.WriteLine("Read registers:");
            foreach (ushort reg in registers)
            {
                Console.WriteLine(reg);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        finally
        {
            // 断开连接
            if (modbusClient.Connected)
            {
                modbusClient.Disconnect();
            }
        }
    }
}

2.Socket编程

复制代码
//示例代码:TCP客户端

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
class TCPClientExample
{
    static void Main()
    {
        // 创建Socket对象
        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        
        // 连接到服务器
        clientSocket.Connect("127.0.0.1", 12345); // 服务器IP和端口
        
        // 发送数据
        string message = "Hello, Server!";
        byte[] byteData = Encoding.ASCII.GetBytes(message);
        clientSocket.Send(byteData);
        
        // 接收数据
        byte[] receivedBytes = new byte[1024];
        int bytesReceived = clientSocket.Receive(receivedBytes);
        string response = Encoding.ASCII.GetString(receivedBytes, 0, bytesReceived);
        Console.WriteLine("Received: " + response);
        
        // 关闭连接
        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();
    }
}

//示例代码:TCP服务器

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
class TCPServerExample
{
    public static void StartListening()
    {
        // 创建Socket对象
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 12345); // 监听端口12345
        serverSocket.Bind(localEndPoint); // 绑定端口
        serverSocket.Listen(10); // 最大连接数10
        Console.WriteLine("Server started...");
        
        while (true)
        {
            Socket clientSocket = serverSocket.Accept(); // 接受客户端连接请求
            Thread receiveThread = new Thread(new ParameterizedThreadStart(ReceiveMessage)); // 开启新线程处理客户端请求
            receiveThread.Start(clientSocket); // 启动线程处理客户端请求
        }
    }
    
    private static void ReceiveMessage(object clientSocketObj)
    {
        Socket clientSocket = (Socket)clientSocketObj;
        byte[] buffer = new byte[1024]; // 接收缓冲区
        int bytesReceived = clientSocket.Receive(buffer); // 接收数据长度
        string data = Encoding.ASCII.GetString(buffer, 0, bytesReceived); // 将字节转换为字符串
        Console.WriteLine("Received: " + data); // 输出接收到的数据
        string response = "ACK"; // 响应消息
        byte[] byteData = Encoding.ASCII.GetBytes(response); // 将字符串转换为字节数组并发送回去
        clientSocket.Send(byteData); // 发送响应数据到客户端
        clientSocket.Shutdown(SocketShutdown.Both); // 关闭连接
        clientSocket.Close(); // 关闭套接字对象
    }
    
    static void Main() { StartListening(); }
}
相关推荐
bigcarp18 小时前
Roundcube Webmail + sqlite
数据库·sqlite
AI成长日志2 天前
【实用工具教程】数据库基础操作实战:SQLite/MySQL连接、CRUD操作与查询优化
数据库·mysql·sqlite
iMingzhen2 天前
不想引入 Redis,我用一张 SQLite 表实现了消息队列
数据库·redis·ai·sqlite
白藏y3 天前
【数据库】SQLite的基础使用
数据库·sqlite
搜佛说3 天前
RocksDB, SQLite, TDengine Edge, LiteDB与sfsDb选型
物联网·edge·sqlite·边缘计算·时序数据库·iot·tdengine
竹林8184 天前
从数据混乱到丝滑管理:我在Python项目中重构SQLite数据库的实战记录
python·sqlite
Yungoal5 天前
C++链接并操作嵌入式数据库SQLite
数据库·c++·sqlite
umeelove357 天前
使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
数据库·qt·sqlite
真智AI7 天前
FastAPI+SQLite任务API:从零到可测上线
数据库·sqlite·fastapi
XiaoLeisj7 天前
Android 文件与数据存储实战:SharedPreferences、SQLite 与 Room 的渐进式实现
android·java·数据库·ui·sqlite·room·sp