[C#] 基本網路技術(三) 建立 TCP 連線

  • 61251
  • 0

[C#] 基本網路技術(三) 建立 TCP 連線

Introduction

這邊實作一個 Server 端與 Client 端的連線,進行資料傳送與接收;我想這個應該沒甚麼實用性,單純練習。

先貼上一些參考資源

 

Example

sample1 Server 端應用程式

 


//匯入命名空間
using System.Net.Sockets;
namespace TestNetworkServer {
    class Program {
        static void Main(string[] args) {
            System.Net.IPAddress theIPAddress;
            //建立 IPAddress 物件(本機)
            theIPAddress = System.Net.IPAddress.Parse("127.0.0.1");

            //建立監聽物件
            TcpListener myTcpListener = new TcpListener(theIPAddress, 36000);
            //啟動監聽
            myTcpListener.Start();
            Console.WriteLine("通訊埠 36000 等待用戶端連線...... !!");
            Socket mySocket = myTcpListener.AcceptSocket();
            do {
                try {
                    //偵測是否有來自用戶端的連線要求,若是
                    //用戶端請求連線成功,就會秀出訊息。
                    if (mySocket.Connected) {
                        int dataLength;
                        Console.WriteLine("連線成功 !!");
                        byte[] myBufferBytes = new byte[1000];
                        //取得用戶端寫入的資料
                        dataLength = mySocket.Receive(myBufferBytes);

                        Console.WriteLine("接收到的資料長度 {0} \n ", dataLength.ToString());
                        Console.WriteLine("取出用戶端寫入網路資料流的資料內容 :");
                        Console.WriteLine(Encoding.ASCII.GetString(myBufferBytes, 0, dataLength) + "\n");
                        Console.WriteLine("按下 [任意鍵] 將資料回傳至用戶端 !!");
                        Console.ReadLine();
                        //將接收到的資料回傳給用戶端
                        mySocket.Send(myBufferBytes, myBufferBytes.Length, 0);
                    }
                }
                catch (Exception e) {
                    Console.WriteLine(e.Message);
                    mySocket.Close();
                    break;
                }

            } while (true);
        }
    }
}

 

sample2 Client 端應用程式


using System.Net.Sockets;
namespace TestNetworkClient {
    class Program {
        //宣告網路資料流變數
        NetworkStream myNetworkStream;
        //宣告 Tcp 用戶端物件
        TcpClient myTcpClient;

        static void Main(string[] args) {
            Program myNetworkClient = new Program();

            Console.WriteLine("輸入連接機名稱 : ");
            //取得主機名稱
            string hostName = Console.ReadLine();            
            Console.WriteLine("輸入連接通訊埠 : ");
            //取得連線 IP 位址
            int connectPort = int.Parse(Console.ReadLine());
            //建立 TcpClient 物件
            myNetworkClient.myTcpClient = new TcpClient();
            try {
                //測試連線至遠端主機
                myNetworkClient.myTcpClient.Connect(hostName, connectPort);
                Console.WriteLine("連線成功 !!\n");
            }
            catch {
                Console.WriteLine
                           ("主機 {0} 通訊埠 {1} 無法連接  !!", hostName, connectPort);
                return;
            }

            myNetworkClient.WriteData();
            myNetworkClient.ReadData();
            Console.ReadKey();
        }

        //寫入資料
        void WriteData() {
            String strTest = "this is a test string !!";
            //將字串轉 byte 陣列,使用 ASCII 編碼
            Byte[] myBytes = Encoding.ASCII.GetBytes(strTest);

            Console.WriteLine("建立網路資料流 !!");
            //建立網路資料流
            myNetworkStream = myTcpClient.GetStream();

            Console.WriteLine("將字串寫入資料流 !!");
            //將字串寫入資料流
            myNetworkStream.Write(myBytes, 0, myBytes.Length);
        }

        //讀取資料
        void ReadData() {
            Console.WriteLine("從網路資料流讀取資料 !!");
            //從網路資料流讀取資料
            int bufferSize = myTcpClient.ReceiveBufferSize;
            byte[] myBufferBytes = new byte[bufferSize];
            myNetworkStream.Read(myBufferBytes, 0, bufferSize);
            //取得資料並且解碼文字
            Console.WriteLine(Encoding.ASCII.GetString(myBufferBytes, 0, bufferSize));
        }
    }
}

 

執行結果

1.先啟動 Server 端應用程式

2010-01-16_175914

2. 啟動 Client 端應用程式,定且輸入相關資訊

2010-01-16_180023

3. Client 端輸入好後,按下 enter ,Server 端會接到資訊

2010-01-16_180230

4. Server 端按下任意鍵,將資料回傳給 Client ,Client 會接收到資料

2010-01-16_180616

 

 

三小俠  小弟獻醜,歡迎指教