分组发送已经成功了!
在接受时候出现了问题(是指针的问题)
使用WSAGetLastError()得到的值为0x0000271E表示:系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
例子部分代码是:
PBYTE pSampleBuffer=new BYTE[_MAX_PATH]; //接受数据存放的地址int addr_cli_len1 = sizeof(addr_cli);
int length=pHeader->pack_size; //总共需要接受的字节数
int Loop=((int)length)/(8*1024); //得到循环的次数-1 //
Loop += 1;
int len=8*1024; //每次接受的字节数(最后一次除外)
for(int i=0;i<Loop;i++)
{
bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
int j=WSAGetLastError();
{
len=length-(8*1024)*(Loop-1); //得到最后没有发送字节的大小
}
}使用WSAGetLastError()得到的值为0x0000271E表示:系统检测到在一个调用中尝试使用指针参数时的无效指针地址。 我知道是bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
有问题!我该怎么循环将每次得到的数据写入到pSampleBuffer中去呢
大家帮帮我呀
在接受时候出现了问题(是指针的问题)
使用WSAGetLastError()得到的值为0x0000271E表示:系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
例子部分代码是:
PBYTE pSampleBuffer=new BYTE[_MAX_PATH]; //接受数据存放的地址int addr_cli_len1 = sizeof(addr_cli);
int length=pHeader->pack_size; //总共需要接受的字节数
int Loop=((int)length)/(8*1024); //得到循环的次数-1 //
Loop += 1;
int len=8*1024; //每次接受的字节数(最后一次除外)
for(int i=0;i<Loop;i++)
{
bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
int j=WSAGetLastError();
{
len=length-(8*1024)*(Loop-1); //得到最后没有发送字节的大小
}
}使用WSAGetLastError()得到的值为0x0000271E表示:系统检测到在一个调用中尝试使用指针参数时的无效指针地址。 我知道是bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
有问题!我该怎么循环将每次得到的数据写入到pSampleBuffer中去呢
大家帮帮我呀
解决方案 »
- 疑惑 请各位给指点迷津(串口程序)
- unhandled exception in xxx.exe 0xC0000005:Access Violation
- VC成程序员工资大调查 、 顺便散分
- [再次讨论]关于在另一个软件的视图区绘制图形的问题。(分只送给热心人)
- 谁能介绍一下tcp/ip中的socket概念?谢谢
- 学习《Programming Windows》遇到的问题
- 一个简单的对话框问题
- 怎样在CView里访问CChildFrame里的成员变量
- 如何把Edit控件贴到FlexGrid控件之中?
- 谁能用CCS控制banner中的文字大小,请赐教?
- CCmdTarget中好多取vtable地址的是什么意思啊,有什么用啊,请高人指教!!!
- 使用ADO如何传入参数为空字符串的参数来调用存储过程,急等答复,谢谢!
这一句有问题。
len = min(length-(8*1024)*(Loop-1),8*1024);
if(Loop-2==i)
{
len=length-(8*1024)*(Loop-1);}
也就是最后接受的数据不是8k
在发送端我已经检测确实每次都发送8k的数据,发送了11次
但是在接受端就有问题了
使用WSAGetLastError()得到的值为0x0000271E表示:系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
是不是这里有什么问题呀
len是写总共接受的字节数还是每次接受的字节数呀
我可以加你的QQ吗我的是 531173526
我的意思是我总共要接受的数据为80k
每次接受8k,我申请了了一块内存.
我接受的时候bytes = recvfrom(mRcvSock, (char*)(pSampleBuffer+len*i), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
其中len是8k还是80k呀
int addr_cli_len1 = sizeof(addr_cli);
int length=pHeader->pack_size; PBYTE pSampleBuffer=new BYTE[length];int iRecvLen = 0;
while(iRecvLen < length)
{
int ilen = recvfrom(mRcvSock, (char*)(pSampleBuffer+iRecvLen), len, 0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len1);
if(ilen == 0)
{
//error or socket closed
break;
}
iRecvLen += ilen;
}
其实,这样的实现方式不太好。如果是连续发送了两次80k的东西,可能中间的包会乱掉。
因为不保证先发先到。
建议你的recv的缓存也只有8k,在每个发送的头上打上标识,每次也只接受8k,然后,根据接收到标识填充组合。呵呵,我上不了qq。也就没法加你了。
加我的QQ帮帮我好吗
做我的老师引路人好吗