1. 程式人生 > >【 C# 】 簡易的Socket TCP Client客戶端 -- 與PLC通訊

【 C# 】 簡易的Socket TCP Client客戶端 -- 與PLC通訊

public class SocketClient
    {
        //宣告IP,埠,和一個用來連線的Socket
        private string _ip;
        private int _port;
        private System.Net.Sockets.TcpClient _tcpClient;
        
        //建立一個委託,用來滿足其他類呼叫
        public delegate void DelegateMessage(byte[] bytes) ;
        public event DelegateMessage OnmessageEvent;

        /// <summary>
        /// 建構函式
        /// </summary>
        /// <param name="remoteIp">IP地址</param>
        /// <param name="remotePort">埠號</param>
        public SocketClient(string remoteIp,int remotePort)
        {
            this._ip = remoteIp;
            this._port = remotePort;
        }

        //TCP連線
        public bool Connect()
        {
            _tcpClient = new TcpClient();
            try
            {
                _tcpClient.Connect(IPAddress.Parse(_ip), _port);
                Task.Run(new Action(ReceiveMessage));//開啟執行緒,不停接收訊息
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return true;//返回連線狀態
        }

        /// <summary>
        /// 傳送訊息
        /// </summary>
        /// <param name="bytes">需要傳送的位元組</param>
        public void SendMessage(byte[] bytes)
        {
            NetworkStream networkStream = _tcpClient.GetStream();
            networkStream.Write(bytes, 0, bytes.Length);
        }


        //接收訊息
        public void ReceiveMessage()
        {
            NetworkStream networkStream = _tcpClient.GetStream();
            while (true)
            {
                byte[] buffer = new byte[8];
                int size = networkStream.Read(buffer, 0, buffer.Length);
                OnmessageEvent?.Invoke(buffer);
            }            
        }

    }