Глюк с NetworkStream или TcpClient ?
От: RealDammit  
Дата: 20.05.07 21:07
Оценка:

То ли я упустил что-то, то ли в NetworkStream.Write(byte[] buffer, int offset, int size) или TcpClient охрененный баг.

Это сцуко передавать больше 8760 байт за раз не хочет !

Запускал два экземпляра рсапределенного приложения (на ноуте и домашней PC-шке).
В одном вызывал

ns.Write(data2send, 0, len);


в другом

int bytesRead = ns.Read(data, 0, len);


Допустим data2send содержит 3000 байт, вызываем ns.Write с ноута, он успешно пишет data2send в поток.
После этого на PC-шке TcpClient подхватывает данные из потока. НО ! bytesRead какого то х.. равно не 3000, а 2920 !
То есть, все, что > 2920 обрезалось нафиг.

Попробовал, передавать кол-во байт меньшее 2920 — всё как часы, сколько отправил — столько и принял.

Потом докопался до TcpClient.Client.ReceiveBufferSize, выставил его в 1МБ, однако это тоже не исправило положение, передаваться стало не 2920, а 8760 байт, но ведь не 1МБ как было выставлено.

Может кто в курсе. Это что так и надо что-ли ?
Re: Глюк с NetworkStream или TcpClient ?
От: stump http://stump-workshop.blogspot.com/
Дата: 21.05.07 05:29
Оценка:
Здравствуйте, RealDammit, Вы писали:

RD>Может кто в курсе. Это что так и надо что-ли ?


в MSDN про это написано.

do {
    byte[] data = new byte[len];
    int bytesRead = ns.Read(data, 0, len);
    // обрабатываем очередную порцию данных
    // list.Add(data);
} while (ns.DataAvailable);
Понедельник начинается в субботу
Re: Глюк с NetworkStream или TcpClient ?
От: Аноним  
Дата: 21.05.07 06:34
Оценка:
RD>Может кто в курсе. Это что так и надо что-ли ?

Почему же сразу бага?.. Данные могли просто ещё не дойти. Ты должен в цикле проверять доступность данных и читать если что-то уже пришло.
Re[2]: Глюк с NetworkStream или TcpClient ?
От: RealDammit  
Дата: 28.05.07 06:18
Оценка:
Здравствуйте, stump, Вы писали:

S>Здравствуйте, RealDammit, Вы писали:


RD>>Может кто в курсе. Это что так и надо что-ли ?


S>в MSDN про это написано.


S>
S>do {
S>    byte[] data = new byte[len];
S>    int bytesRead = ns.Read(data, 0, len);
S>    // обрабатываем очередную порцию данных
S>    // list.Add(data);
S>} while (ns.DataAvailable);
S>


В точку, спасибо.
Re[2]: Глюк с NetworkStream или TcpClient ?
От: RealDammit  
Дата: 28.05.07 06:20
Оценка:
Здравствуйте, Аноним, Вы писали:

RD>>Может кто в курсе. Это что так и надо что-ли ?


А>Почему же сразу бага?.. Данные могли просто ещё не дойти. Ты должен в цикле проверять доступность данных и читать если что-то уже пришло.


Доходили данные, не знал блин, что в цикле проверять надо
Re: Глюк с NetworkStream или TcpClient ?
От: _Morpheus_  
Дата: 01.06.07 18:54
Оценка:
Здравствуйте, RealDammit, Вы писали:

RD>

RD>То ли я упустил что-то, то ли в NetworkStream.Write(byte[] buffer, int offset, int size) или TcpClient охрененный баг.

RD>Это сцуко передавать больше 8760 байт за раз не хочет !


конечно упустил, 8760 байт это размер буфера в твоей ОС. на других системах цифра может отличаться — размер можно менять в настройках ОС.
Наверняка ты читаешь одним вызовом Read, который тебе вернет не больше чем помещается в буфере. После этого ты наверное разрываешь соединение, а зря, т.к. в это время по сети передается следующая порция данных. Нужно было вызывать Read в цикле, пока не прочитаешь весь размер переданного блока.
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.