C#另類重寫

來源:互聯網
上載者:User

這個我不知道起個什麼名字好。只是在寫TcpClient的時候想重寫了TcpClient   Client屬性的Send方法,實際上就是Socket的Send方法了。因為我要以字串互動資料,這個byte[]轉換太麻煩了。

比如發送接收,在沒有有重寫的時候,發送和接受台麻煩了。

TcpClient client = listener.AcceptTcpClient();
                    
string buff = "成功建立串連\r\n";
byte[] b = System.Text.Encoding.Default.GetBytes(buff);
client.Client.Send(b);

NetworkStream myNetworkStream = client.GetStream();
 byte[] bytes = new byte[1024];
int bytesRead = myNetworkStream.Read(bytes, 0, bytes.Length);
string getstr = Encoding.Default.GetString(bytes, 0, bytesRead);

如果定義一個類 MyTcpClient 繼承自 TcpClient ,但是listener.AcceptTcpClient();的類型是TcpClient ,無法轉換為MyTcpClient 。

MyTcpClient  client = (MyTcpClient )listener.AcceptTcpClient();是不可以的。

那麼,如果我直接定義MyTcpClient  有Send方法
  /// <summary>
  /// 下發服務端資訊
  /// </summary>
  /// <param name="msg"></param>
  public void Send(string msg)
  {
   byte[] b = System.Text.Encoding.Default.GetBytes(msg);
   Tcp.Client.Send(b);
  }
在這裡是無法使用了。

另類一點的方法是彙總一下。
具體代碼就是    /// <summary>
    /// 該類型為TcpClient
    /// 值為new TcpListener().AcceptTcpClient()
    /// </summary>
    public class MyTcpClient
    {
        TcpClient Tcp { get; set; }
        NetworkStream myNetworkStream;

        public bool Connected { get { return Tcp.Connected; } }

        /// <summary>
        /// 下發服務端資訊
        /// </summary>
        /// <param name="msg"></param>
        public void Send(string msg)
        {
            byte[] b = System.Text.Encoding.Default.GetBytes(msg);
            Tcp.Client.Send(b);
        }

        public void Close()
        {
            myNetworkStream.Close();
            Tcp.Close();
        }

        /// <summary>
        /// 接收用戶端資料
        /// </summary>
        /// <returns></returns>
        public string Received()
        {
            byte[] bytes = new byte[1024];
            int bytesRead = myNetworkStream.Read(bytes, 0, bytes.Length);
            string getstr = Encoding.Default.GetString(bytes, 0, bytesRead);
            return getstr;
        }

        MyTcpClient(TcpClient tcp)
        {
            Tcp = tcp;
            myNetworkStream = Tcp.GetStream();
        }

        /// <summary>
        /// 重載等於
        /// </summary>
        /// <param name="tcp"></param>
        /// <returns></returns>
        public static implicit operator MyTcpClient(TcpClient tcp)
        {
            return new MyTcpClient(tcp);
        }
    }


這樣用MyTcpClient 替換掉TcpClient 是不是很另類,呵呵

使用的時候            TcpListener listener = null;
            listener = new TcpListener(8009);
            listener.Start();

            while (true)
            {
                MyTcpClient client = listener.AcceptTcpClient();
                client.Send(DateTime.Now.ToString() + "成功建立串連\r\n");
                Console.Write(client.Received());

                client.Close();
            }
            listener.Stop();

這就簡單太多了  : p

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.