古詩詞大全網 - 四字成語 - C#中Socket類ReceiveFrom函數讀數據時卡死?

C#中Socket類ReceiveFrom函數讀數據時卡死?

receiveFrom 方法 讀取數據的時候 如果緩沖區不夠大 則會分好幾次讀取。

通過判斷socket.Available ?來判斷上次讀取的數據還有多少未讀取。如果Available ==0則本次讀取完畢

可以將接收方法封裝在壹個類中(SocketClient),實例化類後在單個線程中運行。 ?

int?recv;

byte[]?data;

string?receiveStr="";

while?(true)

{

//如果發送的字節已經完畢。則重置接收字符串,休眠線程重新等待數據

if?(mySocket.Available?==?0)

{

//重置前首先嘗試寫個事件或委托將這次接收的receiveStr傳遞出去

OnDataReceived(receiveStr);//這個事件可以自己去補充

receiveStr="";

System.Threading.Thread.Sleep(1);

continue;

}

int?bufferSize?=1024;

data?=?new?byte[1024];

//接收數據到

int?recv?=?mySocket.ReceiveFrom((data,ref?Remote));//Remote?為EndPoint對象?

將該批次數據保存在receiveStr中

receiveStr+=Encoding.ASCII.GetString(data,0,recv);

}

}

//接收的類中?實例化上面的類並訂閱

SocketClient?xxx=new?SocketClient();

//訂閱接收事件

xxx.OnDataReceived+=new?Hander(this.DataReceived);

void?DataReceived(string?receive)

{

Console.WriteLine("接收到了收據:"+receive)

}