То ли я упустил что-то, то ли в 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МБ как было выставлено.
Может кто в курсе. Это что так и надо что-ли ?
Здравствуйте, RealDammit, Вы писали:
RD>Может кто в курсе. Это что так и надо что-ли ?
в MSDN про это написано.
do {
byte[] data = new byte[len];
int bytesRead = ns.Read(data, 0, len);
// обрабатываем очередную порцию данных
// list.Add(data);
} while (ns.DataAvailable);
Здравствуйте, 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>
В точку, спасибо.
Здравствуйте, Аноним, Вы писали:
RD>>Может кто в курсе. Это что так и надо что-ли ?
А>Почему же сразу бага?.. Данные могли просто ещё не дойти. Ты должен в цикле проверять доступность данных и читать если что-то уже пришло.
Доходили данные, не знал блин, что в цикле проверять надо
Здравствуйте, 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>>