非同步Socket寫聊天程式

2021-04-06 20:06:56 字數 2226 閱讀 8888

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 ...