socket
網路應用程式如同一般檔案
i/o一樣在資料訪問未完成的時候,整個應用程式會停滯,直到網路操作完全成功為止。若是遇上不佳的網路環境,這種情形將會嚴重影響整個網路程式的運作。對於網路延遲,
.net
提供了自己的一組解決方法,非同步操作。
socket
類提供的方法成員中包含一組專門用來進行非同步操作的
socket
方法。這些方法以成對出現:
beginconnect
與endconnect
提供非同步聯機功能、
beginaccept
與endaccept
提供非同步接受請求、
beginreceive
與endreceive
非同步接收資料、
beginsend
與endsend
非同步傳送資料。
其實這些方法和同步相當類似,最大的差異在於
asynccallback
類派生物件,上述的非同步方法接受乙個
asynccallback
物件,封裝**方法,並在
socket
網路操作完成之後,返回
iasyncresult
介面物件。此物件被當作引數。傳入**的方法,**的方法呼叫結束相關非同步方法,並且傳入
iasyncresult
,取得相關的非同步操作資訊。
public
inte***ce iasyncresult
public
delegate
void asynccallback (iasyncresult ar)
ar為非同步操作的結果,獲取非同步操作的返回值。
服務端**示例
public
static
void startlistening(socket listener, ipendpoint localendpoint)
}
//請求**過程(當有乙個新客戶端請求連線時發生)
private
static
void acceptcallback(iasyncresult ar)
//接收資訊**過程(當接收到客戶端資訊時發生)
private
static
void receivecallback(iasyncresult ar)
輔助物件
public
class
stateobject
客戶端程式
private
static
manualresetevent connectdone = new
manualresetevent(false);
private
static
manualresetevent senddone = new
manualresetevent(false);
private
static
manualresetevent receivedone = new
manualresetevent(false);
private
static
string response = string.empty;
//遠端裝置接收到的資訊
public
static
void startclient(socket client, ipendpoint remoteep)
private
static
void connectcallback(iasyncresult ar)
private
static
void receive(socket client)
private
static
void receivecallback(iasyncresult ar)
public
static
void send(socket client, string data)
private
static
void sendcallback(iasyncresult ar)
上面的示例只說明了非同步聊天程式的原理,沒有對可能發生的異常進行處理和其它輔助方法。
Socket 聊天小程式
伺服器端 server.c include include include include include include include in.h include include include define buflen 1024 define port 6666 define listnum ...
簡單的socket聊天程式
伺服器 include include include include include include include include define port 18888 埠 define buflen 1024 快取區大小 define listennum 20 socket最大監聽數 int m...
socket程式設計之點對點聊天程式
p2psrv.c include include include include include include 解決父程序退出,子程序不退出 include include include include define err exit m do while 0 void handler int ...