加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

通过TCP传输大数据时,为什么最后一个包接收端收不到?

发布时间:2022-11-26 13:32:39 所属栏目:大数据 来源:未知
导读: 通过TCP传输大数据时,为什么最后一个包接收端收不到?发送端都发完了,但接收端接收不到最后一个包.
我是采用异步I/O的方式:
(1)发送端:
....
int nLeft;
nLeft = FileLength;//将要发送的BM

通过TCP传输大数据时,为什么最后一个包接收端收不到?发送端都发完了,但接收端接收不到最后一个包.

我是采用异步I/O的方式:

(1)发送端:

....

int nLeft;

nLeft = FileLength;//将要发送的BMP数据的长度.

int idx;

idx = 0;

while (nLeft > 0)

{

//SendFileInf[SendFileIndex].pFileMemoryAddr为将要发送的数据缓冲区地址

ret = send(SendDataSock, SendFileInf[SendFileIndex].pFileMemoryAddr + idx, nLeft, 0);

大数据堆栈_内存被改为堆栈段后数据会改变_堆栈数据的进出原则是

if (ret == SOCKET_ERROR)

{

AfxMessageBox("Send() BMP Data Error!");

break;

}

nLeft -= ret;

idx += ret;

}

....

(2)接收端:

case FD_READ:

内存被改为堆栈段后数据会改变_堆栈数据的进出原则是_大数据堆栈

//m_SendProc[nIndex][0].SendID为接收端套接字,pbuff为缓冲区

ret = recv(m_SendProc[nIndex][0].SendID, pbuff, 1024, 0);//接收数据

// m_SendProc[nIndex][FileNo].pFileMemoryAddr为接收数据缓冲区.

//m_SendProc[nIndex][FileNo].CurRecvFileLen为每次接收到的数据的累积长度.

memcpy(m_SendProc[nIndex][FileNo].pFileMemoryAddr + m_SendProc[nIndex][FileNo].CurRecvFileLen, pbuff, ret);

m_SendProc[nIndex][FileNo].CurRecvFileLen += ret;

//调试时显示接收到的包的长度.

TRACE("m_SendProc[nIndex][FileNo].CurRecvFileLen is %d", m_SendProc[nIndex][FileNo].CurRecvFileLen);

//清空缓冲区

ZeroMemory(pbuff, 1024);

break;

这样,在调试时大数据堆栈,接收端显示收到的数据长度要比发送端少最后一个包.

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!