HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: флаги SocketFlags OutOfBand и Partial

[Ответить]
LuceferAB [14.02.2006 23:49] флаги SocketFlags OutOfBand и Partial:
Подскажите влияние флагов на поведение команды Socket.Receive
Насколько мне известно, при пересылки данные могут группироваться произвольно, и для того что бы их принять приходится комбинировать функцию приёма read с функцией ожидания WaitForData. Естетсвенно в случае разрыва связи или если сервер прислал меньше данных чем ожидалось программа обрабатывает таймаут.
А как дела обстоят в c# .NET?

Т.е. если я ожидаю 2000 байтов и пишу:

byte byteBuff = new byte ;
sock.Receive(byteBuff, 2000, SocketFlags.none);

Означает ли это что будет принято именно 2000 байт (если сервер не разорвал соединение, но посылает информацию кусочками) и что произойдёт если сервер не сможет передать требуемое количество данных?
И как на это влияют флаги SocketFlags?

P.S. в MSDN что-то этому моменту уделено совсем мало внимания, либо я где-то не там ищу.
P.P.S. VS 2003 CF1.1
LuceferAB [15.02.2006 00:14] :
Вот нашел пример, и обратил внимание что Receive возвращает int, про который в хэлпе ничего не говориться. Я так понимаю это реально прочитанное кол-во байт? Т.е. код будет примерно такой такой:
int TotalReadBytes=0, CurReadBytes=0, NeedRead=2000;
while (true)
{
CurReadBytes = sock.Receive(CmdID, TotalReadBytes, NeedRead, SocketFlags.None);
TotalReadBytes+=CurReadBytes;
NeedRead-=CurReadBytes;
if (NeedRead<=0) break; //всё прочитано.
if (CurReadBytes<=0) break; //читать нечего.
}
Тогда сразу ещё вопрос: а где задавать таймаут на ожидание данных?

P.S.
http://msdn.microsoft.com/library/RUS/cpref/html/frlrfsystemnetsocketssocketclassreceivetopic.asp?frame=true
[Ответить]