GG们,帮俺看段代码

Brogrammer 2006-12-22 03:33:12
void __fastcall TForwardThread::ClientExecute()
{
char *buffer;
char strAmt[4];
char strTel[10];
int index,nRcvLen;
AnsiString strResponse,url;

//---- Place thread code here ----
// make sure connection is active
//while (!Terminated /*&& ClientSocket->Connected*/)
//{
try
{
nRcvLen = ClientSocket->ReceiveLength();
buffer = (char*)malloc(nRcvLen);
memset(strAmt, 0, sizeof(strAmt));
memset(strTel, 0, sizeof(strTel));

//Creates an instance of TWinSocketStream for a Windows socket object
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket,30000);
try
{
// give the client 30 seconds to start writing
if (pStream->WaitForData(30000))
{
// if can't read in 30 seconds, close the connection
if (pStream->Read(buffer, sizeof(buffer) == 0))
ClientSocket->Close();
else
//if (pStream->Read(buffer, sizeof(buffer)) > 0)
{
/* TODO : process the request */
//从读取的数据中获得电话号码字段,并将其追加到url
memcpy(strTel,buffer,sizeof(strTel));
url = "http://syd007/handle.asp?username=a&password=1";
url.cat_printf("&telno=%s",strTel);

//最有可能出问题的就是这里了,在本地打开了iis
IdHTTP1->Port=80;
IdHTTP1->Host="localhost";
IdHTTP1->Request->Accept = "text/html";
strResponse = IdHTTP1->Get(url);
//响应消息中有一字端returnX,先找到它的位置,再得到X的值存在strResponse
index = strResponse.AnsiPos("return");
strResponse = strResponse.SubString(index+6,1);

//将信息写
memset(buffer,0,sizeof(buffer));
memcpy(buffer,"a",10);
memcpy(buffer+10,strResponse.c_str(),1);
pStream->Write(buffer,11);
}
}
else
ClientSocket->Close();
}
__finally
{
delete pStream;
free(buffer);
//delete mStream;
}
}
catch (Exception &E)
{
/* TODO : HandleException */
}
//}//while

}
===============================================================
程序开始运行,等待客户端输入。但有数据到达时,BCB跳出一个错误窗口,提示EAccessViolation错误,请GG们看看哪里的指针越界了,初次接触BCB,很多不熟的,thx!
...全文
150 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSQ__CPU 2006-12-22
  • 打赏
  • 举报
回复
还有代码的其他问题
memset(buffer,0,sizeof(buffer));
目的是干吗?初始化buffer的前4个字节?如果是这样,应该写明为 memset(buffer,0,4);

如果是想初始化buffer缓冲区全部,sizeof(buffer)结果是4,不是buffer的大小nRcvLen
CSQ__CPU 2006-12-22
  • 打赏
  • 举报
回复
这样的代码可能有问题。
nRcvLen = ClientSocket->ReceiveLength();
buffer = (char*)malloc(nRcvLen);

nRcvLen 大小没有确定,如果收到的长度是1,那么buffer 的缓冲大小是1,下面的memset(buffer,0,sizeof(buffer));等等都会引起(非法访问)问题。
内容概要:本文提出了一种基于混沌系统与DNA编码的复合型彩色数字图像加密方案,旨在解决传统加密算法密钥空间小、抗干扰能力弱的问题。该方案利用混沌系统生成伪随机序列,结合DNA碱基编码规则对图像RGB三通道进行像素级置换与混淆扩散,实现高安全性加密;解密过程则通过逆操作精确还原原始图像。文章重点对该方案进行了系统的抗噪声与抗裁剪性能分析,实验结果表明,该算法在面对高斯噪声、椒盐噪声以及不同面积、位置的裁剪攻击时均表现出优良的鲁棒性,能够有效恢复图像核心信息,适用于网络传输与私密存储等复杂环境下的图像安全保护。; 适合人群:具备一定信号处理或信息安全基础知识,从事图像加密、信息隐藏、多媒体安全等相关领域的科研人员及研究生。; 使用场景及目标:①用于提升数字图像在网络传输中的安全性,防止窃听与篡改;②适用于医疗影像、军事测绘、商业机密等对图像安全性和抗干扰性要求较高的应用场景;③为研究高鲁棒性图像加密技术提供理论支持与实验参考。; 阅读建议:建议读者结合Matlab代码实践加密与解密流程,并自行设计不同强度的噪声与裁剪干扰实验,深入理解混沌置乱与DNA编码在提升算法鲁棒性方面的协同机制。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧