使用TcpClient的例程


 

例子1:

///假定一切工作正常
///連接后發送一次消息,然后不停接受消息並且打印

主要API說明

TcpClient client=new TcpClient();

client.Connect("127.0.0.1",8888);

NetworkStream stream=client.GetStream();

發送:

stream.Write(outBound, 0, outBound.Length);

接受:在另外一個線程,不停的

stream.Read(recvData, 0, bufSize);
class Program
    {
        byte[] recvData = new byte[1024 * 10];
        TcpClient client = new TcpClient();
        NetworkStream stream = null;
        void doWork()
        {
            client.Connect("127.0.0.1", 8888);
            stream = client.GetStream();
            Thread th = new Thread(recv);
            th.Start();
            byte[] outBound = Encoding.ASCII.GetBytes("Hello,this is one client\r\n");
            stream.Write(outBound, 0, outBound.Length);
            stream.Flush();
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.doWork();
        }
        public void recv()
        {
            while (true)
            {
                int bufSize = client.ReceiveBufferSize;
                int count=stream.Read(recvData, 0, bufSize);
                string str = Encoding.ASCII.GetString(recvData, 0, count);
                Console.WriteLine(str);
            }
        }
    }

 例子2:

使用異步,連接異步,發送異步,接受異步

關鍵API

注意這三者異步回調 委托類型

 

 以下例子會提示連接失敗的情況,連接后,接受到消息就打印。

    class Program
    {
        byte[] recvData = new byte[1024 * 10];
        TcpClient client = new TcpClient();
        NetworkStream stream = null;
        void doWork()
        {
            Console.WriteLine("preparing to connect in main thread  " + Thread.CurrentThread.ManagedThreadId);
            client.BeginConnect("127.0.0.1", 8888,ConnectCallBack, client);
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.doWork();
            Console.Read();
        }
        private void ConnectCallBack(IAsyncResult result)
        {
            Console.WriteLine("well, i am in the connect thread..." + Thread.CurrentThread.ManagedThreadId);
            TcpClient client = result.AsyncState as TcpClient;
            try
            {
                client.EndConnect(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("well, seems an error occured...");
                Console.WriteLine("which is " + ex.ToString());
                return;
            }
            Console.WriteLine("Hooray, it worked.");
            client.Client.BeginReceive(recvData, 0, recvData.Length,SocketFlags.None, RecvCallBack, client);
            
        }
        public void RecvCallBack(IAsyncResult result)
        {
            Console.WriteLine("here in recv callback thread.." + Thread.CurrentThread.ManagedThreadId);
            int count = -1;
            try
            {
                count = client.Client.EndReceive(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("遠程計算機關閉");
                return;
            }
            //an recv is done,display it and continue..
            string msg = Encoding.ASCII.GetString(recvData, 0, count);
            Console.WriteLine("your recv this time is:");
            Console.WriteLine(msg);
            client.Client.BeginReceive(recvData, 0, recvData.Length, SocketFlags.None, RecvCallBack, client);
        }
        }

 


免責聲明!

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



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