首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# Socket 編程:通過 IP 和端口向設備發送指令完整範例

     編輯:程式設計綜合問答

場景

已知設備 IP、端口及通訊協議(如修改出廠 IP、恢復出廠設置指令),需在 C# 中實現 TCP 客戶端發送指令並接收響應。

核心代碼

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace DeviceController
{
    class Program
    {
        static void Main(string[] args)
        {
            string ip = "192.168.1.100";   // 設備 IP
            int port = 5000;               // 設備端口
            string cmd = "SET_IP 192.168.1.200"; // 例:修改 IP 指令

            try
            {
                using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
                {
                    client.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
                    Console.WriteLine("已連接設備");

                    byte[] sendBytes = Encoding.ASCII.GetBytes(cmd + "\r\n"); // 協議可能需換行符
                    client.Send(sendBytes);
                    Console.WriteLine("指令已發送: " + cmd);

                    byte[] recvBytes = new byte[1024];
                    int len = client.Receive(recvBytes);
                    string response = Encoding.ASCII.GetString(recvBytes, 0, len);
                    Console.WriteLine("設備響應: " + response);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("異常: " + ex.Message);
            }
            Console.ReadKey();
        }
    }
}

關鍵點

  1. 編碼一致:雙端需約定 ASCII/UTF-8/十六進制等編碼方式。
  2. 指令結尾:多數設備要求指令以 \r\n 或 \n 結尾,發送前需確認協議文檔。
  3. 超時處理:生產環境建議設置 client.ReceiveTimeout 並捕獲 SocketException。
  4. 長連接 vs 短連接:頻繁交互建議維持長連接並實現心跳;單次操作用完即關閉。

擴展:異步非阻塞模式

UI 程序中應使用 BeginConnect/BeginSend/BeginReceive 或 async/await 避免阻塞主線程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved