C# 使用socket 和webscoket 實現實時通訊


創建一個服務作為socket服務端

創建SocketHelper

//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

//namespace ClientService
//{
//    class SocketHelper
//    {
//    }
//}

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;

namespace ClientService
{
    /// <summary>
    /// ClassName 玄機SocketHelper 
    /// Coding By 君臨
    /// </summary>
    public class SocketHelper
    {
        #region 推送器 加密
        public delegate void PushSockets(Sockets sockets);
        public static PushSockets pushSockets;
        /// <summary>
        /// 數據DES加密
        /// </summary>
        public class Encrypt
        {
            private byte[] iba_mIV = new byte[8];  //向量
            private byte[] iba_mKey = new byte[8]; //密鑰
            private DESCryptoServiceProvider io_DES = new DESCryptoServiceProvider();

            public Encrypt()
            {
                this.iba_mKey[0] = 0x95;
                this.iba_mKey[1] = 0xc4;
                this.iba_mKey[2] = 0xf6;
                this.iba_mKey[3] = 0x49;
                this.iba_mKey[4] = 0xac;
                this.iba_mKey[5] = 0x61;
                this.iba_mKey[6] = 0xa3;
                this.iba_mKey[7] = 0xe2;
                this.iba_mIV[0] = 0xf9;
                this.iba_mIV[1] = 0x6a;
                this.iba_mIV[2] = 0x65;
                this.iba_mIV[3] = 0xb8;
                this.iba_mIV[4] = 0x4a;
                this.iba_mIV[5] = 0x23;
                this.iba_mIV[6] = 0xfe;
                this.iba_mIV[7] = 0xc6;
                this.io_DES.Key = this.iba_mKey;
                this.io_DES.IV = this.iba_mIV;
            }
            /// <summary>
            /// 初始化加密向量與密鑰 長度為8
            /// </summary>
            /// <param name="iba_mIV">向量</param>
            /// <param name="iba_mKey">密鑰</param>
            public Encrypt(byte[] iba_mIV, byte[] iba_mKey)
            {
                this.io_DES.IV = iba_mIV;
                this.io_DES.Key = iba_mKey;
            }
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="as_Data"></param>
            /// <returns></returns>
            public string doDecrypt(string as_Data)
            {
                ICryptoTransform lo_ICT = this.io_DES.CreateDecryptor(this.io_DES.Key, this.io_DES.IV);
                try
                {
                    byte[] lba_bufIn = this.FromHexString(as_Data);//Encoding.UTF8.GetString(Convert.FromBase64String(
                    byte[] lba_bufOut = lo_ICT.TransformFinalBlock(lba_bufIn, 0, lba_bufIn.Length);
                    return Encoding.UTF8.GetString(lba_bufOut);
                }
                catch
                {
                    return as_Data;
                }
            }
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="as_Data"></param>
            /// <returns></returns>
            public string doEncrypt(string as_Data)
            {
                ICryptoTransform lo_ICT = this.io_DES.CreateEncryptor(this.io_DES.Key, this.io_DES.IV);
                try
                {
                    byte[] lba_bufIn = Encoding.UTF8.GetBytes(as_Data);
                    byte[] lba_bufOut = lo_ICT.TransformFinalBlock(lba_bufIn, 0, lba_bufIn.Length);
                    return GetHexString(lba_bufOut);//Convert.ToBase64String(Encoding.UTF8.GetBytes();
                }
                catch
                {
                    return "";
                }
            }
            /// <summary>
            /// 轉換2進制
            /// </summary>
            /// <param name="as_value"></param>
            /// <returns></returns>
            private byte[] FromHexString(string as_value)
            {
                byte[] lba_buf = new byte[Convert.ToInt32((int)(as_value.Length / 2))];
                for (int li_i = 0; li_i < lba_buf.Length; li_i++)
                {
                    lba_buf[li_i] = Convert.ToByte(as_value.Substring(li_i * 2, 2), 0x10);
                }
                return lba_buf;
            }
            /// <summary>
            /// 字節轉字符串
            /// </summary>
            /// <param name="aba_buf"></param>
            /// <returns></returns>
            private string GetHexString(byte[] aba_buf)
            {
                StringBuilder lsb_value = new StringBuilder();
                foreach (byte lb_byte in aba_buf)
                {
                    lsb_value.Append(Convert.ToString(lb_byte, 0x10).PadLeft(2, '0'));
                }
                return lsb_value.ToString();
            }
        }
        #endregion
        /// <summary>
        /// Tcp同步服務端,SocketObject繼承抽象類
        /// 服務端采用TcpListener封裝.
        /// 使用Semaphore 來控制並發,每次處理5個.最大處理5000 
        /// </summary>
        public class TcpServer : SocketObject
        {
            bool IsStop = false;
            object obj = new object();
            /// <summary>
            /// 信號量
            /// </summary>
            private Semaphore semap = new Semaphore(5, 5000);
            /// <summary>
            /// 客戶端隊列集合
            /// </summary>
            public List<Sockets> ClientList = new List<Sockets>();
            /// <summary>
            /// 服務端
            /// </summary>
            private TcpListener listener;
            /// <summary>
            /// 當前IP地址
            /// </summary>
            private IPAddress Ipaddress;
            /// <summary>
            /// 歡迎消息
            /// </summary>
            private string boundary = "www.xuanjics.com";
            /// <summary>
            /// 當前監聽端口
            /// </summary>
            private int Port;
            /// <summary>
            /// 當前IP,端口對象
            /// </summary>
            private IPEndPoint ip;
            /// <summary>
            /// 初始化服務端對象
            /// </summary>
            /// <param name="ipaddress">IP地址</param>
            /// <param name="port">監聽端口</param>
            public override void InitSocket(IPAddress ipaddress, int port)
            {
                Ipaddress = ipaddress;
                Port = port;
                listener = new TcpListener(Ipaddress, Port);
            }
            /// <summary>
            /// 初始化服務端對象
            /// </summary>
            /// <param name="ipaddress">IP地址</param>
            /// <param name="port">監聽端口</param>
            public override void InitSocket(string ipaddress, int port)
            {
                Ipaddress = IPAddress.Parse(ipaddress);
                Port = port;
                ip = new IPEndPoint(Ipaddress, Port);
                listener = new TcpListener(Ipaddress, Port);
            }
            /// <summary>
            /// 啟動監聽,並處理連接
            /// </summary>
            public override void Start()
            {
                try
                {
                    listener.Start();
                    Thread AccTh = new Thread(new ThreadStart(delegate
                    {
                        while (true)
                        {

                            if (IsStop != false)
                            {
                                break;
                            }
                            GetAcceptTcpClient();
                            Thread.Sleep(1);
                        }
                    }));
                    AccTh.Start();
                }
                catch (SocketException skex)
                {
                    Sockets sks = new Sockets();
                    sks.ex = skex;
                    pushSockets.Invoke(sks);//推送至UI

                }
            }
            /// <summary>
            /// 等待處理新的連接
            /// </summary>
            private void GetAcceptTcpClient()
            {
                try
                {
                    if (listener.Pending())
                    {
                        semap.WaitOne();
                        TcpClient tclient = listener.AcceptTcpClient();
                        //維護客戶端隊列
                        Socket socket = tclient.Client;
                        NetworkStream stream = new NetworkStream(socket, true); //承載這個Socket
                        Sockets sks = new Sockets(tclient.Client.RemoteEndPoint as IPEndPoint, tclient, stream);
                        sks.NewClientFlag = true;
                        //推送新客戶端
                        pushSockets.Invoke(sks);
                        //客戶端異步接收
                        sks.nStream.BeginRead(sks.RecBuffer, 0, sks.RecBuffer.Length, new AsyncCallback(EndReader), sks);
                        //加入客戶端集合.
                        AddClientList(sks);
                        //主動向客戶端發送一條連接成功信息 
                        if (stream.CanWrite)
                        {
                            byte[] buffer = Encoding.UTF8.GetBytes(boundary);
                            stream.Write(buffer, 0, buffer.Length);
                        }
                        semap.Release();
                    }
                }
                catch
                {
                    return;
                }
            }
            /// <summary>
            /// 異步接收發送的信息.
            /// </summary>
            /// <param name="ir"></param>
            private void EndReader(IAsyncResult ir)
            {
                Sockets sks = ir.AsyncState as Sockets;


                if (sks != null && listener != null)
                {
                    try
                    {
                        if (sks.NewClientFlag || sks.Offset != 0)
                        {
                            sks.NewClientFlag = false;
                            sks.Offset = sks.nStream.EndRead(ir);
                            pushSockets.Invoke(sks);//推送至UI
                            sks.nStream.BeginRead(sks.RecBuffer, 0, sks.RecBuffer.Length, new AsyncCallback(EndReader), sks);
                        }
                    }
                    catch (Exception skex)
                    {
                        lock (obj)
                        {
                            //移除異常類
                            ClientList.Remove(sks);
                            Sockets sk = sks;
                            sk.ClientDispose = true;//客戶端退出
                            sk.ex = skex;
                            pushSockets.Invoke(sks);//推送至UI
                        }
                    }
                }
            }
            /// <summary>
            /// 加入隊列.
            /// </summary>
            /// <param name="sk"></param>
            private void AddClientList(Sockets sk)
            {
                //雖然有信號量,還是用lock增加系數
                lock (obj)
                {
                    Sockets sockets = ClientList.Find(o => { return o.Ip == sk.Ip; });
                    //如果不存在則添加,否則更新
                    if (sockets == null)
                    {
                        ClientList.Add(sk);
                    }
                    else
                    {
                        ClientList.Remove(sockets);
                        ClientList.Add(sk);
                    }
                }
            }
            public override void Stop()
            {
                if (listener != null)
                {
                    listener.Stop();
                    listener = null;
                    IsStop = true;
                    SocketHelper.pushSockets = null;
                }
            }
            /// <summary>
            /// 向所有在線的客戶端發送信息.
            /// </summary>
            /// <param name="SendData">發送的文本</param>
            public void SendToAll(string SendData)
            {
                for (int i = 0; i < ClientList.Count; i++)
                {
                    SendToClient(ClientList[i].Ip, SendData);
                }
            }
            /// <summary>
            /// 向某一位客戶端發送信息
            /// </summary>
            /// <param name="ip">客戶端IP+端口地址</param>
            /// <param name="SendData">發送的數據包</param>
            public void SendToClient(IPEndPoint ip, string SendData)
            {
                try
                {
                    Sockets sks = ClientList.Find(o => { return o.Ip == ip; });
                    if (sks == null || !sks.Client.Connected)
                    {
                        //沒有連接時,標識退出
                        Sockets ks = new Sockets();
                        sks.ClientDispose = true;//標識客戶端下線
                        sks.ex = new Exception("客戶端無連接");
                        pushSockets.Invoke(sks);//推送至UI
                    }
                    if (sks.Client.Connected)
                    {
                        //獲取當前流進行寫入.
                        NetworkStream nStream = sks.nStream;
                        if (nStream.CanWrite)
                        {
                            byte[] buffer = Encoding.UTF8.GetBytes(SendData);
                            nStream.Write(buffer, 0, buffer.Length);
                        }
                        else
                        {
                            //避免流被關閉,重新從對象中獲取流
                            nStream = sks.Client.GetStream();
                            if (nStream.CanWrite)
                            {
                                byte[] buffer = Encoding.UTF8.GetBytes(SendData);
                                nStream.Write(buffer, 0, buffer.Length);
                            }
                            else
                            {
                                //如果還是無法寫入,那么認為客戶端中斷連接.
                                ClientList.Remove(sks);
                                Sockets ks = new Sockets();
                                sks.ClientDispose = true;//如果出現異常,標識客戶端下線
                                sks.ex = new Exception("客戶端無連接");
                                pushSockets.Invoke(sks);//推送至UI

                            }
                        }
                    }
                }
                catch (Exception skex)
                {
                    Sockets sks = new Sockets();
                    sks.ClientDispose = true;//如果出現異常,標識客戶端退出
                    sks.ex = skex;
                    pushSockets.Invoke(sks);//推送至UI

                }
            }
        }
        public class TcpClients : SocketObject
        {
            bool IsClose = false;
            /// <summary>
            /// 當前管理對象
            /// </summary>
            Sockets sk;
            /// <summary>
            /// 客戶端
            /// </summary>
            TcpClient client;
            /// <summary>
            /// 當前連接服務端地址
            /// </summary>
            IPAddress Ipaddress;
            /// <summary>
            /// 當前連接服務端端口號
            /// </summary>
            int Port;
            /// <summary>
            /// 服務端IP+端口
            /// </summary>
            IPEndPoint ip;
            /// <summary>
            /// 發送與接收使用的流
            /// </summary>
            NetworkStream nStream;
            /// <summary>
            /// 初始化Socket
            /// </summary>
            /// <param name="ipaddress"></param>
            /// <param name="port"></param>
            public override void InitSocket(string ipaddress, int port)
            {
                Ipaddress = IPAddress.Parse(ipaddress);
                Port = port;
                ip = new IPEndPoint(Ipaddress, Port);
                client = new TcpClient();
            }
            public void SendData(string SendData)
            {
                try
                {

                    if (client == null || !client.Connected)
                    {
                        Sockets sks = new Sockets();
                        sks.ex = new Exception("客戶端無連接..");
                        sks.ClientDispose = true;
                        pushSockets.Invoke(sks);//推送至UI 
                    }
                    if (client.Connected) //如果連接則發送
                    {
                        if (nStream == null)
                        {
                            nStream = client.GetStream();
                        }
                        byte[] buffer = Encoding.UTF8.GetBytes(SendData);
                        nStream.Write(buffer, 0, buffer.Length);
                    }
                }
                catch (Exception skex)
                {
                    Sockets sks = new Sockets();
                    sks.ex = skex;
                    sks.ClientDispose = true;
                    pushSockets.Invoke(sks);//推送至UI
                }
            }
            /// <summary>
            /// 初始化Socket
            /// </summary>
            /// <param name="ipaddress"></param>
            /// <param name="port"></param>
            public override void InitSocket(IPAddress ipaddress, int port)
            {
                Ipaddress = ipaddress;
                Port = port;
                ip = new IPEndPoint(Ipaddress, Port);
                client = new TcpClient();
            }
            private void Connect()
            {
                client.Connect(ip);
                nStream = new NetworkStream(client.Client, true);
                sk = new Sockets(ip, client, nStream);
                sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk);
            }
            private void EndReader(IAsyncResult ir)
            {

                Sockets s = ir.AsyncState as Sockets;
                try
                {
                    if (s != null)
                    {

                        if (IsClose && client == null)
                        {
                            sk.nStream.Close();
                            sk.nStream.Dispose();
                            return;
                        }
                        s.Offset = s.nStream.EndRead(ir);
                        pushSockets.Invoke(s);//推送至UI
                        sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk);
                    }
                }
                catch (Exception skex)
                {
                    Sockets sks = s;
                    sks.ex = skex;
                    sks.ClientDispose = true;
                    pushSockets.Invoke(sks);//推送至UI

                }

            }
            /// <summary>
            /// 重寫Start方法,其實就是連接服務端
            /// </summary>
            public override void Start()
            {
                Connect();
            }
            public override void Stop()
            {
                Sockets sks = new Sockets();
                if (client != null)
                {
                    client.Client.Shutdown(SocketShutdown.Both);
                    Thread.Sleep(10);
                    client.Close();
                    IsClose = true;
                    client = null;
                }
                else
                {
                    sks.ex = new Exception("客戶端沒有初始化.!");
                }
                pushSockets.Invoke(sks);//推送至UI
            }

        }
        /// <summary>
        /// Socket基類(抽象類)
        /// 抽象3個方法,初始化Socket(含一個構造),停止,啟動方法.
        /// 此抽象類為TcpServer與TcpClient的基類,前者實現后者抽象方法.
        /// 作用: 純屬閑的蛋疼,不寫個OO的我感覺不會寫代碼了...What The Fuck...
        /// </summary>
        public abstract class SocketObject
        {
            public abstract void InitSocket(IPAddress ipaddress, int port);
            public abstract void InitSocket(string ipaddress, int port);
            public abstract void Start();
            public abstract void Stop();

        }
        /// <summary>
        /// 自定義Socket對象
        /// </summary>
        public class Sockets
        {
            /// <summary>
            /// 接收緩沖區
            /// </summary>
            public byte[] RecBuffer = new byte[8 * 1024];
            /// <summary>
            /// 發送緩沖區
            /// </summary>
            public byte[] SendBuffer = new byte[8 * 1024];
            /// <summary>
            /// 異步接收后包的大小
            /// </summary>
            public int Offset { get; set; }
            /// <summary>
            /// 空構造
            /// </summary>
            public Sockets() { }
            /// <summary>
            /// 創建Sockets對象
            /// </summary>
            /// <param name="ip">Ip地址</param>
            /// <param name="client">TcpClient</param>
            /// <param name="ns">承載客戶端Socket的網絡流</param>
            public Sockets(IPEndPoint ip, TcpClient client, NetworkStream ns)
            {
                Ip = ip;
                Client = client;
                nStream = ns;
            }
            /// <summary>
            /// 當前IP地址,端口號
            /// </summary>
            public IPEndPoint Ip { get; set; }
            /// <summary>
            /// 客戶端主通信程序
            /// </summary>
            public TcpClient Client { get; set; }
            /// <summary>
            /// 承載客戶端Socket的網絡流
            /// </summary>
            public NetworkStream nStream { get; set; }
            /// <summary>
            /// 發生異常時不為null.
            /// </summary>
            public Exception ex { get; set; }
            /// <summary>
            /// 新客戶端標識.如果推送器發現此標識為true,那么認為是客戶端上線
            /// 僅服務端有效
            /// </summary>
            public bool NewClientFlag { get; set; }
            /// <summary>
            /// 客戶端退出標識.如果服務端發現此標識為true,那么認為客戶端下線
            /// 客戶端接收此標識時,認為客戶端異常.
            /// </summary>
            public bool ClientDispose { get; set; }
        }
    }
}

創建服務參考 C#創建定時服務 或  C#創建windows服務

 

Service類

 public Service1()
        {
            InitializeComponent();
        }
        public class ReceiveInfo
        {
            public string Ip { get; set; }
            public string Port { get; set; }
            public string TYBH { get; set; }

            public string Token { get; set; }

            public string CL_dk { get; set; }

            public string CL_Name { get; set; }

            public string RuKou { get; set; }

            public string ChuKou { get; set; }

        }
        public static string BasePath = AppDomain.CurrentDomain.BaseDirectory;
        public static ReceiveInfo receiveInfo = null;
        public static string ConfigFileName = "config.json";//配置文件名稱


        /// <summary>
        /// 讀取配置文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static bool ReadConfigFile(string path)
        {
            using (StreamReader fileRead = new StreamReader(path))
            {
                string strRead = fileRead.ReadToEnd();
                if (string.IsNullOrEmpty(strRead))
                {
                    return false;
                }

                try
                {
                    receiveInfo = JsonConvert.DeserializeObject<ReceiveInfo>(strRead);

                }
                catch (Exception)
                {
                    return false;
                }
            }

            return true;
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                if (!ReadConfigFile(BasePath + ConfigFileName))
                    return;

                SocketHelper.pushSockets = new SocketHelper.PushSockets(Rec);//注冊推送器
                client = new SocketHelper.TcpClients();

                ip = receiveInfo.Ip;
                port = receiveInfo.Port;

                client.InitSocket(ip, int.Parse(port));
                client.Start();
                log("連接成功!", "success1");

                timer2.Enabled = true;
            }
            catch (Exception ex)
            {
                log(ex.Message, "aaaa");
                client.Start();
            }


        }

        protected override void OnStop()
        {
        }

        SocketHelper.TcpClients client;
        string ip = string.Empty;
        string port = string.Empty;
        private void timer1_Tick(object sender, EventArgs e)
        {


        }

        /// <summary>
        /// 處理推送過來的消息
        /// </summary>
        /// <param name="rec"></param>
        private void Rec(SocketHelper.Sockets sks)
        {
            if (sks.ex != null)
            {
                if (sks.ClientDispose == true)
                {
                    //由於未知原因引發異常.導致客戶端下線.   比如網絡故障.或服務器斷開連接.
                    log(string.Format("客戶端下線.!"), "error1");
                }
                log(string.Format("異常消息:{0}", sks.ex), "error2");
                try
                {
                    client.Stop();
                    client.InitSocket(ip, int.Parse(port));
                    client.Start();
                }
                catch (Exception ex)
                {
                    log(string.Format(ex.Message), "error4");
                }
            }
            else if (sks.Offset == 0)
            {
                //客戶端主動下線
                log(string.Format("客戶端下線.!"), "error3");
            }
            else
            {
                byte[] buffer = new byte[sks.Offset];
                Array.Copy(sks.RecBuffer, buffer, sks.Offset);
                string str = Encoding.UTF8.GetString(buffer);

                if (str.Contains("TYBH"))
                {
                    var s = str.Split('=');
                    //System.Web.Configuration.WebConfigurationManager.AppSettings["TYBH"] = s[1].ToString();
                    receiveInfo.TYBH = s[1].ToString();
                    using (StreamWriter fileWriter = new StreamWriter(BasePath + ConfigFileName, false))
                    {
                        //fileWriter.WriteAsync(JsonConvert.SerializeObject(receiveInfo));
                        fileWriter.Write(JsonConvert.SerializeObject(receiveInfo));
                    }
                }
                if (str.Contains("CL"))
                {
                    if (string.IsNullOrEmpty(receiveInfo.Token))
                    {
                        receiveInfo.Token = GetToekn(receiveInfo.CL_dk, receiveInfo.CL_Name).data.accessToken;
                        using (StreamWriter fileWriter = new StreamWriter(BasePath + ConfigFileName, false))
                        {
                            //fileWriter.WriteAsync(JsonConvert.SerializeObject(receiveInfo));
                            fileWriter.Write(JsonConvert.SerializeObject(receiveInfo));
                        }
                    }

                    if (str.Contains("GetAccessList"))
                    {
                        if (string.IsNullOrEmpty(receiveInfo.ChuKou) || string.IsNullOrEmpty(receiveInfo.RuKou))
                        {
                            var model = GetZhaDao();
                            if (model != null)
                            {
                                receiveInfo.ChuKou = model.data.FirstOrDefault(c => c.channelName.Contains("出口")).channelId;
                                receiveInfo.RuKou = model.data.FirstOrDefault(c => c.channelName.Contains("入口")).channelId;
                                using (StreamWriter fileWriter = new StreamWriter(BasePath + ConfigFileName, false))
                                {
                                    //fileWriter.WriteAsync(JsonConvert.SerializeObject(receiveInfo));
                                    fileWriter.Write(JsonConvert.SerializeObject(receiveInfo));
                                }
                            }
                        }
                        var s = str.Split(',');

                        HttpClientDoGet1Async(s[1].ToString(), s[2].ToString(), s[3].ToString(), s[4].ToString(), s[5].ToString());

                    }
                    else if (str.Contains("GetCheList"))
                    {
                        var s = str.Split(',');

                        getcarlist(s[1].ToString(), s[2].ToString(), s[3].ToString());
                    }
                    else if (str.Contains("Add"))
                    {
                        var s = str.Split(',');
                        HttpClientDoPost(s[1].ToString(), s[2].ToString(), s[3].ToString(), s[4].ToString(), s[5].ToString(), s[6].ToString());
                    }
                    else if (str.Contains("Update"))
                    {
                        var s = str.Split(',');
                        log(str, "updatestr");

                        UpdateCheLiang(s[1].ToString(), s[2].ToString(), s[3].ToString(), s[4].ToString(), s[5].ToString(), s[6].ToString(), s[7].ToString());
                    }
                    else if (str.Contains("Delete"))
                    {
                        var s = str.Split(',');
                        DeleteChe(s[1].ToString(), s[2].ToString());
                    }

                }


                log(string.Format("服務端{0}發來消息:{1}", sks.Ip, str), "success2");
            }
        }

        public void log(string sign, string filename)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("yyyy/MM/dd/") + "" + filename + ".txt";
            string _path = Path.GetDirectoryName(path);
            if (!Directory.Exists(_path))
            {
                Directory.CreateDirectory(_path);
            }
            System.IO.File.AppendAllText(path, DateTime.Now + sign.ToString() + "\r\n");
        }

        private void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            ////log("111", "222");
            client.SendData("fromclient_TYBH=" + receiveInfo.TYBH);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM