Когда я отправляю пакет по tcp, он разделяется на два пакета

Вам нужно будет добавить цикл для циклического прохождения каждой строки. Вы сделали часть работы, найдя последний ряд. Вы также установили первую строку на Rngheaders, но не использовали.

Dim ws As Worksheet
Dim lrow As Long
Dim AmountCol as Long
Dim BillCol as Long
Dim USDCol as Long
Dim Rngheaders As Range
Dim x as long

Set ws = ThisWorkbook.Sheets("CSV Data PR")
Set Rngheaders = ws.Range("1:1")
lrow = ws.Cells(Rows.Count, 1).End(xlUp).Row

AmountCol = Rngheaders.Find(What:="Amount").Column
BillCol = Rngheaders.Find(What:="Bill.qty").Column
USDCol = Rngheaders.Find(What:="In USD").Column

For x= 2 to lrow
     ws.Cells(x,USDCol) = ws.Cells(x, AmountCol) * ws.Cells(x, BillCol)
Next x
6
задан Svante 20 April 2009 в 21:15
поделиться

3 ответа

Это TCP - вы должны обрабатывать данные как поток . Вам не нужно заботиться о том, как поток разбивается на пакеты, или делать предположения о нем.

Если вам нужно получить один «блок» данных, самый простой способ сделать это надежно - это поставить префикс в длину (например, как 32-битное значение). Вы читаете длину (отмечая, что даже эти байты можно можно разделить на несколько пакетов), а затем многократно читаете (синхронно или асинхронно), отмечая, сколько вы читаете каждый раз, пока не прочитаете все данные.

14
ответ дан 8 December 2019 в 12:22
поделиться

Прочитайте 9.2.4

При анализе протокола прикладного уровня нельзя предполагать, что каждый пакет TCP содержит ровно одно сообщение прикладного уровня. Одно сообщение прикладного уровня можно разбить на несколько пакетов TCP.

5
ответ дан 8 December 2019 в 12:22
поделиться

добавление к ответу Джона:

int offset = 0;
int imagesize = 512;
byte[] buffer = new byte[512];

tcpChannel.Read(buffer, offset, imagesize);
0
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: