GG们,帮俺看段代码
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!