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

       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;
            }
        }
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值