Часть сервера BeginRead выглядит следующим образом:
private void listen()
{
allDone.Reset();
networkStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(newDataRecievedCallback), null);
allDone.WaitOne(10);
}
private void newDataRecievedCallback(IAsyncResult rst)
{
try
{
int incomeDataSize = networkStream.EndRead(rst);
lastRecievedBuffer = convertToString(buffer, incomeDataSize).Trim();
cleanBuffer();
if (IsValidXml(lastRecievedBuffer))
parseXML(lastRecievedBuffer);
allDone.Set();
//Here I call the listen() method again
listen();
}
catch (Exception ex)
{
LogSystem.saveServerError(ex.StackTrace, ex.Source);
}
}
Использование NetworkStream:
private NetworkStream networkStream;
private TcpClient tcpClient;
//this part is in the constructor of the Server class
tcpClient = new TcpClient(loginData.Host, loginData.Port);
networkStream = tcpClient.GetStream();
Это правильное использование BeginRead () или я вызываю Async BeginRead() Метод, подобный логике синхронизации?
Есть ли лучший способ сделать это без повторного вызова метода listen ()?Спасибо!