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)}