У меня был код (допустим, простое приложение для чата), я использовал Tcp с синхронизацией. но поскольку асинхронный способ вообще лучше, хотя его сложнее настроить, я решил изменить способ с синхронизации на асинхронный. но теперь я столкнулся с некоторыми проблемами при использовании async.
Позвольте мне объяснить мою проблему следующим кодом:
public void Send(byte[] message, Socket connection)
{
connection.BeginSend(message,
0,
message.Length,
SocketFlags.None,
new AsyncCallback(OnSend),
connection);
}
и в методе OnSend я просто использую connection.EndSend(result), где результатом является IAsyncResult. но когда я затем дважды вызываю метод Send, как в следующем коде, обратный вызов OnReceive будет получать их оба как одно сообщение.
Send(Encoding.Unicode.GetBytes("Hello"));
Send(Encoding.Unicode.GetBytes("Bye"));
мой метод OnReceiveMethod будет использовать Console.WriteLine(message);где message — это строка, полученная от однорангового узла.и вывод с использованием способа синхронизации должен быть
Hello
Bye
, но асинхронным способом я получаю его как одно сообщение, а не два, поэтому оно печатается
HelloBye
С уважением, Peyman Mortazavi