今天就跟大家聊聊有關(guān)如何實(shí)現(xiàn)C#服務(wù)端與客戶端連接,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)柳江,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
C#服務(wù)端與客戶端連接實(shí)現(xiàn)的時(shí)間性:當(dāng)服務(wù)器開始對端口偵聽之后,便可以創(chuàng)建客戶端與它建立連接。這一步是通過在客戶端創(chuàng)建一個(gè)TcpClient的類型實(shí)例完成。每創(chuàng)建一個(gè)新的TcpClient便相當(dāng)于創(chuàng)建了一個(gè)新的套接字Socket去與服務(wù)端通信,.Net會(huì)自動(dòng)為這個(gè)套接字分配一個(gè)端口號(hào),上面說過,TcpClient類不過是對Socket進(jìn)行了一個(gè)包裝。創(chuàng)建TcpClient類型實(shí)例時(shí),可以在構(gòu)造函數(shù)中指定遠(yuǎn)程服務(wù)器的地址和端口號(hào)。這樣在創(chuàng)建的同時(shí),就會(huì)向遠(yuǎn)程服務(wù)端發(fā)送一個(gè)連接請求(“握手”),一旦成功,則兩者間的連接就建立起來了。也可以使用重載的無參數(shù)構(gòu)造函數(shù)創(chuàng)建對象,然后再調(diào)用Connect()方法,在Connect()方法中傳入遠(yuǎn)程服務(wù)器地址和端口號(hào),來與服務(wù)器建立連接。
這里需要注意的是,不管是使用有參數(shù)的構(gòu)造函數(shù)與服務(wù)器連接,或者是通過Connect()方法與服務(wù)器建立連接,都是同步方法(或者說是阻塞的,英文叫block)。它的意思是說,客戶端在與服務(wù)端連接成功、從而方法返回,或者是服務(wù)端不存、從而拋出異常之前,是無法繼續(xù)進(jìn)行后繼操作的。這里還有一個(gè)名為BeginConnect()的方法,用于實(shí)施異步的連接,這樣程序不會(huì)被阻塞,可以立即執(zhí)行后面的操作,這是因?yàn)榭赡苡捎诰W(wǎng)絡(luò)擁塞等問題,連接需要較長時(shí)間才能完成。網(wǎng)絡(luò)編程中有非常多的異步操作,凡事都是由簡入難,關(guān)于異步操作,我們后面再討論,現(xiàn)在只看同步操作。
創(chuàng)建一個(gè)新的控制臺(tái)應(yīng)用程序項(xiàng)目,命名為ClientConsole,它是我們的客戶端,然后添加下面的代碼,創(chuàng)建與服務(wù)器的連接:
C#服務(wù)端與客戶端連接實(shí)現(xiàn)實(shí)例:
class Client { static void Main(string[] args) { Console.WriteLine("Client Running ..."); TcpClient client = new TcpClient(); try { client.Connect("localhost", 8500); // 與服務(wù)器連接 } catch (Exception ex) { Console.WriteLine(ex.Message); return; } // 打印連接到的服務(wù)端信息 Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint); // 按Q退出 } }//C#服務(wù)端與客戶端連接實(shí)現(xiàn)上面帶代碼中,我們通過調(diào)用Connect()方法來與服務(wù)端連接。隨后,我們打印了這個(gè)連接消息:本機(jī)的Ip地址和端口號(hào),以及連接到的遠(yuǎn)程Ip地址和端口號(hào)。TcpClient的Client屬性返回了一個(gè)Socket對象,它的LocalEndPoint和RemoteEndPoint屬性分別包含了本地和遠(yuǎn)程的地址信息。先運(yùn)行服務(wù)端,再運(yùn)行這段代碼。可以看到兩邊的輸出情況如下:
// 服務(wù)端: Server is running ... Start Listening ... // 客戶端: Client Running ... Server Connected!127.0.0.1:4761 --> 127.0.0.1:8500
我們看到客戶端使用的端口號(hào)為4761,上面已經(jīng)說過,這個(gè)端口號(hào)是由.NET隨機(jī)選取的,并不需要我們來設(shè)置,并且每次運(yùn)行時(shí),這個(gè)端口號(hào)都不同。再次打開“命令提示符”,輸入“netstat -a”,可以看到下面的C#服務(wù)端與客戶端連接實(shí)現(xiàn)實(shí)例輸出:
TCPjimmy:8500 0.0.0.0:0 LISTENING TCPjimmy:8500 localhost:4761 ESTABLISHED TCPjimmy:4761 localhost:8500 ESTABLISHED
從這里我們可以得出幾個(gè)重要信息:1、端口8500和端口4761建立了連接,這個(gè)4761端口便是客戶端用來與服務(wù)端進(jìn)行通信的端口;2、8500端口在與客戶端建立起一個(gè)連接后,仍然繼續(xù)保持在監(jiān)聽狀態(tài)。這也就是說一個(gè)端口可以與多個(gè)遠(yuǎn)程端口建立通信,這是顯然的,大家眾所周之的HTTP使用的默認(rèn)端口為80,但是一個(gè)Web服務(wù)器要通過這個(gè)端口與多少個(gè)瀏覽器通信啊。
看完上述內(nèi)容,你們對如何實(shí)現(xiàn)C#服務(wù)端與客戶端連接有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站標(biāo)題:如何實(shí)現(xiàn)C#服務(wù)端與客戶端連接
文章鏈接:http://www.chinadenli.net/article6/iggiig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站制作、域名注冊、云服務(wù)器、微信公眾號(hào)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)