Мне нужна помощь со следующим. это связано с асинхронными сокетами.C# void ReceiveData (IAsyncResult iar)
от отправителя:
string stringData = "Welcome to my server server server";
byte[] message1 = Encoding.ASCII.GetBytes(stringData);
//MessageBox.Show(message1.Length.ToString());
client.BeginSend(message1, 0, message1.Length, SocketFlags.None, new AsyncCallback(SendData), client);
здесь, как можно видеть, message.length можно найти.
-
на клиенте:
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
мой вопрос, есть ли способ, чтобы получить доступ к фактической длине переданных данных и на основе этих данных вызова ПРИИХ до полного сообщение не будет получено ?
вместо префикса я только что реализовал цикл, как указано здесь http://stackoverflow.com/questions/582550/c-begin-endreceive-how -do-я-читать-большой-данных. Кажется, это работает! :) – iTEgg
Вы можете только продолжать цикл, если хотите получать все данные до тех пор, пока сокет не будет закрыт - иначе вы не узнаете, когда вы на самом деле видели все это. Это нормально, если вы просто делаете один запрос/ответ на соединение, но он не работает для протокола типа «разговор» с несколькими сообщениями в каждом направлении. –