以太网常用通讯协议
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(); }
}