C# 網路編程之Tcp實現用戶端和伺服器聊天

來源:互聯網
上載者:User

最近使用Socket網路通訊端編程中,在同步與非同步通訊中用戶端與伺服器總是無法響應,但在學習Tcp協議編程中完成了通訊聊天功能,下面簡單講講我最近學到的及Tcp聊天的原始碼及詳細注釋。

Tcp協議是一個傳輸層的協議,在Tcp協議編程中它通常使用的是3個類,其命名空間為System.Net.Sockets:

1.TcpListener:基於TCP協議服務端開發,監聽IP地址和連接埠號碼是否串連。

該類常用的方法有Start()開始監聽、AcceptSocket()返回通訊端接受串連請求、AcceptTcpClient()返回客戶對象接受串連請求、Stop()停止監聽

2.TcpClient:基於TCP協議用戶端編程,提供用戶端串連,通過網路連接發送接受資料。

該類常用的方法有Connect()與伺服器主機串連、GetStream()用來獲得答應的資料流、Close()關閉串連

3.NetWorkStream:用於擷取和操作網路流,該程式中還是用寫入流和讀取流對象實現寫入和讀取資料的操作。

該類常用的方法有Read()從網路流中讀取資料、Write()從網路流中寫資料。

下面是這個例子的原始碼:(該代碼是根據自己所學及《C#範例開發大全》中一個例子改變而來通過兩個控制台程式實現通話)

1.服務端代碼(TCPServer)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//添加新的命名空間using System.Net;using System.Net.Sockets;     using System.IO;              //流StreamReadernamespace TCPServer{    class Program    {        static void Main(string[] args)        {            //Parse將字串轉換為IP地址類型            IPAddress myIP = IPAddress.Parse("127.0.0.1");            //構造一個TcpListener(IP地址,連接埠)對象,TCP服務端            TcpListener myServer = new TcpListener(myIP,6688);                       //開始監聽            myServer.Start();            Console.WriteLine("等候一個串連...");            //構造TCP用戶端:接受串連請求            TcpClient client = myServer.AcceptTcpClient();            Console.WriteLine("用戶端已經串連...");            //構造NetworkStream類,該類用於擷取和操作網路流            NetworkStream stream = client.GetStream();            //讀資料流對象            StreamReader sr = new StreamReader(stream);            //寫資料流對象            StreamWriter sw = new StreamWriter(stream);            while (true)            {                Console.WriteLine("用戶端:" + sr.ReadLine());                string msg = Console.ReadLine();                sw.WriteLine(msg);                sw.Flush();               //重新整理流            }            client.Close();               //關閉用戶端        }    }}

2.用戶端代碼(TCPClient)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//添加新的命名空間using System.Net;using System.Net.Sockets;using System.IO;              //流StreamReadernamespace TCPClient{    class Program    {        static void Main(string[] args)        {            //Parse將字串轉換為IP地址類型            IPAddress myIP = IPAddress.Parse("127.0.0.1");            //構造一個TcpClient類對象,TCP用戶端            TcpClient client = new TcpClient();            //與TCP伺服器串連            client.Connect(myIP, 6688);            Console.WriteLine("伺服器已經串連...請輸入對話內容...");            //建立網路流,擷取資料流            NetworkStream stream = client.GetStream();            //讀資料流對象            StreamReader sr = new StreamReader(stream);            //寫資料流對象            StreamWriter sw = new StreamWriter(stream);            while (true)            {                string msg = Console.ReadLine();                sw.WriteLine(msg);                sw.Flush();             //重新整理流                Console.WriteLine("伺服器:" + sr.ReadLine());            }            client.Close();            Console.Read();        }    }}

3.程式示範

先運行伺服器(TCPServer)代碼,它會顯示“等候一個串連...”.再運行用戶端(TCPClient)代碼,運行後此時服務端顯示"用戶端已串連...",用戶端顯示"伺服器已串連...請輸入對話內容".然後依次在用戶端和伺服器中個輸入聊天內容,在另一方會顯示相應傳輸過來的內容,實現TCP聊天通話。下面是在用戶端輸入"你好!我是用戶端."的反應。

更多的通話內容如下所示:

總結:這是自己認為寫得比較好的一篇文章,它比較實用,更重要的是我編寫上面的代碼能運行。我們只需要稍微的介面設計就能實現一個有介面的網路聊天室.它涉及到的知識主要是C#網路編程中的TCP編程知識,最近寫Socket通訊端方面的通訊總是失敗,也看了很多部落格下載了很多程式,但都沒一個比較滿意的。希望上面的文章能幫組到大家,有錯誤不足之處見諒!

最後感謝劉麗霞的《C#範例開發大全》和周存傑的《C#網路編程執行個體教程》兩本書,上面的知識點和代碼都是借鑒了他們前人的知識,希望大家也看看這兩本比較好的C#書。

(By:Eastmount 2013-7-20)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.