C#中TCP/IP通讯类获取数据方法源码,包含通讯连接,获取数据和发送数据所有的函数

发布于:2022-10-15 ⋅ 阅读:(354) ⋅ 点赞:(0)

       const int READ_BUFFER_SIZE = 1024 * 1024;
        const int PORT_NUM = 10000;
        private TcpClient client = new TcpClient();
        private byte[] readBuffer = new byte[READ_BUFFER_SIZE];
        public delegate void LineReceive(MyTCPClient sender, byte[] Data);
        public event LineReceive LineReceived;
        public bool ConStatus;
        public void SendData(byte[] data)
        {
            lock (client.GetStream())
            {
                NetworkStream Nstr;
                Nstr = client.GetStream();
                Int32 buffersize = data.Length;
                Nstr.Write(data, 0, buffersize);
            }
        }
        public void Disconnect()
        {
            MarkAsDisconnected();
        }
        private void StreamReceiver(IAsyncResult ar)
        {
            int BytesRead;
            byte[] st;
            try
            {
                // Ensure that no other threads try to use the stream at the same time.
                lock (client.GetStream())
                {
                    // Finish asynchronous read into readBuffer and get number of bytes read.
                    BytesRead = client.GetStream().EndRead(ar);
                }
                // Convert the byte array the message was saved into, minus one for the
                // Chr(13).
                if (BytesRead < 1)
                {
                    MarkAsDisconnected();
                    //return;
                }
                //strMessage1 = Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1);
                //LineReceived(this, readBuffer);
                //Ensure that no other threads try to use the stream at the same time.
                if (readBuffer.Length <= BytesRead)
                {
                    st = new byte[readBuffer.Length];

                    Array.Copy(readBuffer, 0, st, 0, readBuffer.Length);
                }
                else
                {
                    st = new byte[BytesRead];

                    Array.Copy(readBuffer, 0, st, 0, BytesRead);
                }

                LineReceived(this, st);
                lock (client.GetStream())
                {
                    // Start a new asynchronous read into readBuffer.
                    client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
                }
            }
            catch
            {
                MarkAsDisconnected();
            }
        }
        private void MarkAsDisconnected()
        {
            //readBuffer = null;
            client.Close();
            ConStatus = false;
        }
        public void ConnectHost(IPAddress hostipaddress, int port)
        {
            try
            {
                client = new TcpClient();
                client.Connect(hostipaddress, port);
                readBuffer = new byte[READ_BUFFER_SIZE];
                client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
                ConStatus = true;
            }
            catch
            {
                ConStatus = false;
            }
        }
 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到