現在我們只剩下伺服器端了。
伺服器端包含兩個類,乙個tcplistener,乙個tcplistenerclient。
tcplistener只管start與stop還有accept。
tcplistenerclient是連線到伺服器的客戶端,相當於tcpclient在tcplistener上的體現。
現在我們開始編寫tcplistener。
/// /// tcp監聽端tcplistener繼承ienumerable與idisposable///
public class tcplistener : ienumerable
public isockethandler handler
private int port;
/// /// 監聽埠。
///
public int port
set}
/// /// 服務啟動中
///
public bool isstarted
/// /// 開始服務。
///
public void start()
/// /// 停止服務。
///
public void stop()
/// /// 接收完成時引發事件。
///
public event eventhandlerreceivecompleted;
/// /// 接受客戶完成時引發事件。
///
public event eventhandleracceptcompleted;
/// /// 客戶斷開完成時引發事件。
///
public event eventhandlerdisconnectcompleted;
/// /// 傳送完成時引發事件。
///
public event eventhandlersendcompleted;
/// /// 獲取客戶端泛型。
///
///
public ienumeratorgetenumerator()
/// /// 獲取客戶端泛型。
///
///
system.collections.ienumerator system.collections.ienumerable.getenumerator()
/// /// 釋放資源。
///
///
public void dispose()
}
clients儲存所有已連線的客戶端。
編寫start方法。
/// /// 開始服務。編寫stop與dispose方法。///
public void start()
}//非同步監聽結束
private void endaccept(iasyncresult result)
//客戶端斷開連線
private void client_disconnectcompleted(object sender, socketeventargs e)
//收到客戶端傳送的資料
private void client_receivecompleted(object sender, socketeventargs e)
//向客戶端傳送資料完成
private void client_sendcompleted(object sender, socketeventargs e)
/// /// 停止服務。輪到tcplistenerclient了,tcplistenerclient其實和tcpclient差不多,也是要繼承isocket和idisposable。///
public void stop()
socket.close();
socket = null;
isstarted = false;}}
/// /// 釋放資源
///
public void dispose()
既然重複**做麼多,要不要合併起來呢?答案是肯定的。
做乙個socketbase類,繼承isocket和idisposable。
大部分**直接從tcpclient複製過來。
view code
然後我們再寫tcplistenerclient,繼承socketbase。
public class tcplistenerclient : socketbase我們還可以給tcplistenerclient加上點東西,比如類似session的東西。public tcplistener listener
}
private dictionarydata;為建構函式新增以下**。public object this[string key]
setif (data.containskey(key))
data[key] = value;
else
data.add(key, value);}}
data = new dictionary();這樣,我們的tcplistenerclient就完成了。//儲存ip位址到字典
this["remoteendpoint"] = socket.remoteendpoint;
接下來我們再把tcpclient修改以下,繼承socketbase。
view code
所有工作,全部完成。
這個socket還有很多功能可以增加、改造。
比如你自己寫乙個handler內建加密解密,或者壓縮與解壓縮。
還可以再改寫一下stream,可以弄成negotiatestream驗證等等。
GJM Socket TCP 通訊連線(四)
伺服器開啟後,開始非同步監聽客戶端連線。客戶端連線時,例項化tcplistenerclient,並開始非同步監聽資料。接收到資料時,判斷資料長度,0則為斷開連線,不為0則引發接收資料完成事件。可以通過tcplistenerclient傳送資料或斷開連線。伺服器關閉時要先斷開所有客戶端連線。客戶端連線...
如何再造通訊連鎖的客戶之路
最近在廣東,親身體驗了廣東的城市轉型,以及在通訊連鎖行業的客戶進行企業轉型的痛苦之路。當整個區域,乃至於中國在為低端的製造加工業向高階製造業和服務業轉型的時候,給通訊連鎖行業帶來的觸動不亞於一場大 隨著上千人 上萬人的工廠一夜之間的搬遷,瞬間很多門店門可羅雀,客流量銳減,擺在這些大型通訊連鎖企業面前...
FTP 一 通訊連線原理
一 ftp服務說明 ftp file transfer protocol 即檔案傳輸協議,是網際網路比較古老的服務之一,用於在網路上進行檔案傳輸的一套標準協議,使用客戶 伺服器模式。它屬於網路傳輸協議的應用層。二 ftp服務執行模式 ftp服務一般預設執行在tcp 20 資料傳輸 和tcp 21 通...