【问题标题】:what's the best way to store stream of data over tcp into large array?将 tcp 上的数据流存储到大数组中的最佳方法是什么?
【发布时间】:2013-07-09 08:54:30
【问题描述】:

我想通过 TCP 连接将数据流存储到大数组中,我该怎么做?

我的代码:

int iResult, count;
int recvbuflen = 512;
char buff[4096]={0};
char recvbuf[512] = {0};

.................

count = 0;

do {

    iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    if (iResult > 0) {

                count+=iResult;

                //code to store in the buff[] array until reach to 4096 byte
                //that's what i need
                //for example: each time bind or add the recvbuf[] array at 
                //the end of buff[] array until reach to 4096 byte. 

                if(count == 4096)
                {
                  //do the next process
                  count = 0; 
                }
              }
    }while(iResult > 0);

任何帮助。

【问题讨论】:

  • 你有正确的原则,但你应该在循环的下一次迭代中收到iResult字节less。否则,您可能会在第一次调用(第一次迭代)中收到 4095 字节,在下一次调用(下一次迭代)中收到 4096,这不是您想要的。
  • 不知道是接收到的数据不超过4096字节。
  • @abdo.eng2006210:不,您每次最多会收到 512 个字节,因此请准备好在已经收到的字节之后复制您收到的字节数。通常,您还应该检查您总共可以接收超过 4096 个字节。
  • 我每次都接收 512 字节或更少字节的流,所以我需要从接收到的数据中收集每 8 个并将它们存储在大 buff[4096] 数组中。

标签: c++ c visual-c++ tcpsocket


【解决方案1】:

你可以直接recv到你的大缓冲区中,每次都添加一个偏移量:

iRes = recv(ClientSocket, (buff+offset), 4096-offset, 0);

等等。请注意不要溢出缓冲区。如果您需要单独接收数据并根据内容将它们添加到缓冲区中,只需将recvbuf memcpy 到缓冲区中(带偏移量)。偏移量会一直跟踪,直到缓冲区已经被填满。 同样,请注意缓冲区溢出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2017-03-26
    • 2020-04-08
    • 2014-07-21
    • 2016-03-05
    • 2020-10-19
    • 2011-08-09
    相关资源
    最近更新 更多