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