コード例 #1
0
        private void _ReceiveTcp(IAsyncResult ar)
        {
            TcpRecvObj  obj = (TcpRecvObj)ar.AsyncState;
            SocketError err;
            int         read_size = obj.Client.Client.EndReceive(ar, out err);

            if (err == SocketError.Success)
            {
                if (read_size > 0)
                {
                    //byte buffer轉 unicode 時要這樣處理,
                    //不然buffer裡的空字元 0x00 會在unicode顯示 \0\0\0\0
                    string msg = Encoding.ASCII.GetString(obj.Buffer).TrimEnd('\0');
                    UpdateTextbox(textBox1, msg);

                    //讀取完資料記得把buffer清一清
                    Array.Clear(obj.Buffer, 0, obj.Buffer.Length);
                }

                //如果連線沒斷掉就繼續呼叫AsyncReceive讀下一筆
                if (obj.Client.Client.Connected)
                {
                    obj.Client.Client.BeginReceive(obj.Buffer, 0, obj.Buffer.Length, SocketFlags.None, _ReceiveTcp, obj);
                }
            }
        }
コード例 #2
0
        private void _AcceptTcpClient(IAsyncResult ar)
        {
            try
            {
                TcpClient client = Listener.EndAcceptTcpClient(ar);

                TcpRecvObj obj = new TcpRecvObj()
                {
                    Client = client,
                    Buffer = new byte[256],
                };
                //不走TcpClient,用更底層的Socket直接讀
                client.Client.BeginReceive(obj.Buffer, 0, obj.Buffer.Length, SocketFlags.None, _ReceiveTcp, obj);
                Listener.BeginAcceptTcpClient(_AcceptTcpClient, null);
            }
            catch (Exception ex)
            { }
        }