TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(初级入门篇)
TcpClient類和TcpListener類屬于.NET框架下網(wǎng)絡(luò)通信中的應(yīng)用層類,為Socket通信提供了更簡單,對用戶更為友好的接口。應(yīng)用層類比位于底層的Socket類提供了更高層次的抽象,封裝了套接字的創(chuàng)建,不需要處理連接的細(xì)節(jié)。
TcpClient類以更高的抽象程度提供TCP服務(wù)的基礎(chǔ),因此許多應(yīng)用層次上的通信協(xié)議,比如FTP傳輸協(xié)議、HTTP超文本傳輸協(xié)議都直接創(chuàng)建在TcpClient等類之上。TcpClient類直接為客戶端設(shè)計(jì),提供了通過網(wǎng)絡(luò)連接發(fā)送和接收數(shù)據(jù)的簡單方法;TcpListener類用于服務(wù)器端,用來監(jiān)視TCP端口上客戶端的請求。
1.TcpClient類
要建立TCP連接,應(yīng)該提供IP地址和端口號。TcpClient類有三種構(gòu)造函數(shù)。
(1)public TcpClient():使用本機(jī)默認(rèn)的IP地址和默認(rèn)的端口0來創(chuàng)建TCP連接。
(2)public TcpClient(IPEndPoint):IPEndPoint指定在建立遠(yuǎn)程連接時(shí)所使用的本機(jī)IP地址和端口號。
(3)public TcpClient(string,int):初始化TcpClient類的新實(shí)例,并連接到指定主機(jī)上的制定端口。
需要說明的是,在使用前兩種構(gòu)造函數(shù)的時(shí)候,只是實(shí)現(xiàn)了TcpClient實(shí)例對象與IP地址和Port端口的綁定,要完成連接,還需要顯示地用Connect方法指定與遠(yuǎn)程主機(jī)的連接。
在網(wǎng)絡(luò)數(shù)據(jù)接收和發(fā)送方面,TcpClient類使用NetworkStream網(wǎng)絡(luò)流處理技術(shù),使得讀寫數(shù)據(jù)更加方便直觀,而不需考慮具體傳輸?shù)膬?nèi)容。在使用GetStream方法獲得用于發(fā)送和接收數(shù)據(jù)的網(wǎng)絡(luò)流之后,就可以使用標(biāo)準(zhǔn)流讀寫方法Write和Read來發(fā)送和接收數(shù)據(jù)了。
2.TcpListener類
TcpListener類用于監(jiān)視TCP端口上客戶端的請求,通過綁定本機(jī)IP地址和端口(IP地址和端口應(yīng)與客戶端請求一致)來創(chuàng)建TcpListener對象實(shí)例,由Start()方法啟動(dòng)偵聽;當(dāng)TcpListener偵聽到客戶端連接后,根據(jù)客戶端的請求方式來處理請求,即如果是Socket連接請求,則使用AcceptSocket方法,如果是TcpClient連接請求,則使用AcceptTcpClient方法。最后要關(guān)閉使用的連接
tcpclient和socket的區(qū)別?
TcpClient是在Socket的基礎(chǔ)上運(yùn)行的。Socket完全可以涵蓋TcpClient,只不過TcpClient為了簡化一部分Socket的功能。
Socket支持TCP,UDP,IP包,Stream,Dgram等諸多類型
而TcpClient只支持TCP和Stream 實(shí)例:?TcpClient和TcpListener 類的使用-編寫一個(gè)點(diǎn)對點(diǎn)聊天工具(簡單入門演示,客戶端和服務(wù)端都是在本機(jī)) 服務(wù)器端代碼: class Program{static void Main(string[] args){IPAddress localAddr = IPAddress.Parse("127.0.0.1");//IP地址類,建立一個(gè)IP地址對象TcpListener server = new TcpListener(localAddr, 13000);//使用IP和端口建立偵聽器server.Start();//開始偵聽Console.WriteLine("等待一個(gè)連接");TcpClient client = server.AcceptTcpClient();//接受一個(gè)連接,并創(chuàng)建一個(gè)服務(wù)器端TcpClientConsole.WriteLine("客戶端已經(jīng)連接");//創(chuàng)建網(wǎng)絡(luò)流相關(guān)的讀寫器NetworkStream stream = client.GetStream();StreamReader sr = new StreamReader(stream);StreamWriter sw = new StreamWriter(stream);while (true){Console.WriteLine("客戶端:"+sr.ReadLine());//從客戶端接受數(shù)據(jù)string msg = Console.ReadLine();sw.WriteLine(msg);//向客戶端發(fā)送數(shù)據(jù) sw.Flush();}client.Close();}} 客戶端代碼: class Program{static void Main(string[] args){IPAddress serverAddr = IPAddress.Parse("127.0.0.1");//創(chuàng)建一個(gè)TcpClientTcpClient client = new TcpClient();//向服務(wù)器發(fā)送連接請求,需要與服務(wù)端的IP和端口一致(節(jié)點(diǎn)通信)client.Connect(serverAddr, 13000);//創(chuàng)建流讀寫器NetworkStream stream = client.GetStream();StreamReader sr = new StreamReader(stream);StreamWriter sw = new StreamWriter(stream);while (true){string msg = Console.ReadLine();//向服務(wù)器端發(fā)送數(shù)據(jù) sw.WriteLine(msg);sw.Flush();//從服務(wù)器端讀取數(shù)據(jù)Console.WriteLine("服務(wù)器:"+sr.ReadLine());}client.Close();}} 效果展示: 先啟動(dòng)服務(wù)端,再啟動(dòng)客戶端,客戶端發(fā)送數(shù)據(jù),服務(wù)端接受,然后服務(wù)端發(fā)送數(shù)據(jù)數(shù)據(jù),客戶端同樣可以接收。往復(fù)發(fā)送接受,完成點(diǎn)對點(diǎn)聊天通信
轉(zhuǎn)載于:https://www.cnblogs.com/lqsilly/archive/2013/02/19/2916559.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(初级入门篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1815. 计算两点间的距离
- 下一篇: 实战:使用IPSec保护服务器安全