以太网通讯

接口开发笔记-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(); }
}
相关推荐
C++ 老炮儿的技术栈2 天前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
在世修行4 天前
从零打造 C# 工业视觉检测系统(九):工厂模式实现 SQL Server / MySQL / SQLite 三库切换
mysql·sqlite·c#·工厂模式
JLWcai202510094 天前
核电打磨 “安全卫士”|金利威不锈钢专用树脂砂轮,合规高效双在线
mysql·mongodb·eureka·sqlite·rabbitmq·nosql·memcached
qq21084629535 天前
PostgreSQL、SQLite、Redis、TDengine
redis·postgresql·sqlite
梦想三三6 天前
Python从零实现AI Agent电商客服(Qwen/Ollama+SQLite源码解析)
人工智能·python·sqlite
雪隐8 天前
WPF + MVVM 实战系列01-一个老狗回炉重造 WPF 的 12 天血泪史
sqlite·c#·mvvm
小王同学66668 天前
Django 5 中实现文件上传功能
数据库·django·sqlite
Ming_studying9 天前
Python + SQLite FTS5 构建本地文档全文搜索器:增量索引、中文检索与高亮
jvm·数据库·python·sqlite
酩酊仙人9 天前
Windows Server部署django
windows·django·sqlite
我命由我123459 天前
SQLite 数据库参数数量超限导致的崩溃问题:SQLiteException: too many SQL variables
java·数据库·sql·java-ee·sqlite·android-studio·android runtime