程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0套接字編程實例初探(3)

C# 2.0套接字編程實例初探(3)

編輯:關於C語言

上面的例子是用的Socket類,System.Net.Socket命名空間還提供了兩個抽象高級類TCPClient和UDPClIEnt和用於通訊流處理的NetWorkStream,讓我們看下例子

客戶端

TcpClient tcpClient=new TcpCLIEnt(主機IP,端口號);
NetworkStream ns=tcp.ClIEnt.GetStream();

服務端

TcpListener tcpListener=new TcpListener(監聽端口);
tcpListener.Start();
TcpClient tcpClient=tcpListener.AcceptTcpClIEnt();
NetworkStream ns=tcpClIEnt.GetStream();

服務端用TcpListener監聽,然後把連接的對象實例化為一個TcpClient,調用TcpClIEnt.GetStream()方法,返回網絡流實例化為一個NetworlStream流,下面就是用流的方法進行Send,Receive

如果是UdpClient的話,就直接UdpClient實例化,然後調用UdpClient的Send和Receive方法,需要注意的事,UdpClIEnt沒有返回網絡流的方法,就是說沒有GetStream方法,所以無法流化,而且使用Udp通信的時候,不要服務器監聽。

現在我們大致了解了.Net Socket通信的流程,下面我們來作一個稍微復雜點的程序,一個廣播式的C/S聊天程序。

客戶端設計需要一個1個ListBox,用於顯示聊天內容,一個TextBox輸入你要說的話,一個Button發送留言,一個Button建立連接。

點擊建立連接的Button後出來一個對話框,提示輸入連接服務器的IP,端口,和你的昵稱,啟動一個接受線程,負責接受從服務器傳來的信息並顯示在ListBox上面。

服務器端2個Button,一個啟動服務,一個T掉已建立連接的客戶端,一個ListBox顯示連接上的客戶端的Ip和端口。

比較重要的地方是字符串編碼的問題,需要先把需要傳送的字符串按照UTF8編碼,然後接受的時候再還原成為GB2312,不然中文顯示會是亂碼。

還有一個就是接收線程,我這裡簡單寫成一個While(ture)循環,不斷判斷是否有信息流入,有就接收,並顯示在ListBox上,這裡有問題,在.Net2.0裡面,交錯線程修改窗體空間屬性的時候會引發一個異常,不可以直接修改,需要定義一個委托來修改。

當客戶端需要斷開連接的時候,比如點擊窗體右上角的XX,就需要定義一個this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Closing);(.Net2.0是FormClosing系統事件),在Closing()函數裡面,發送Close字符給服務端,服務器判斷循環判斷所有的連接上的客戶端傳來的信息,如果是以Close開頭,斷開與其的連接。看到這裡,讀者就會問了,如果我在聊天窗口輸入Close是不是也斷開連接呢?不是的,在聊天窗口輸入的信息傳給服務器的時候開頭都要加上Ip信息和昵稱,所以不會沖突。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved