异步socket时send数据包后EndReceive
private void SendCallback(IAsyncResult ar)
{ // 从state对象中获取socket
Socket client = (Socket)ar.AsyncState; // 完成数据发送.
int bytesSent = client.EndSend(ar);
}
private static void ReceiveCallback(IAsyncResult ar)
{ // 从输入参数异步state对象中获取state和socket对象
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket; //从远程设备读取消息头
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{ // 有数据,存储.
string headstr = Encoding.Default.GetString(state.buffer, 0, bytesRead);
state.sb.Append(headstr); // 继续读取.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
else
{ // 所有数据读取完毕.
if (state.sb.Length > 1) { response = state.sb.ToString(); } // 所有数据读取完毕的指示信号.
receiveDone.Set();
}
}