我基本上在PHP中得到了一些代码,它只是连接到我的C ++服务器,它正在侦听端口,发送消息,然后关闭套接字。
我正在尝试阅读我发送的内容但事情是......如果我连接太多次C ++服务器最终会发出异常:
Server.exe中0x00B6C99B处的未处理异常:0xC0000005:访问冲突读取位置0xFEEEFEEE。
基本上在PHP脚本中的页面加载时,它将套接字(TCP)连接到C ++服务器,发送消息,然后关闭套接字。因此,如果我在完成时按住刷新大约34次(数量不同),我会得到一个例外。
在堆栈中我可以看到一些变量有:“udp = ??? format = ???”,这非常奇怪,因为这些都已经准备就绪,不知道为什么会出现问号。
我从PHP发送的数据也是:
$message = "hello";
在Visual Studio的本地人中,数据结果是:
“helloðº\rðº\rðº\rðº\rðº\rðºîþ««««««««ITH”
其他一些变量有“读取字符串字符时出错” 而其他人则: “无法读取内存”
这是我的代码:
double webListen = tcplisten(cst::WEB_PORT, 100, 1);
setnagle(webListen, true);
std::list<double> webUsers;
if (webListen <= 0) {
cout << "Failed to listen on port " << cst::WEB_PORT <<endl;
}
cout << endl << "Server listening on port " << cst::WEB_PORT << endl;
while(1){
double WebUser = tcpaccept(webListen, 1);
if(WebUser > -1){
cout<< "NEW WEB: " << WebUser << endl;
webUsers.push_back(WebUser);
}
std::list<double>::iterator it = webUsers.begin();
while (it != webUsers.end())
{
cout << "SOCK: " << *it << endl;
//USE A TRY CATCH!!!
//try{
double Size = receivemessage(*it, 1024, 2); // Messages coming from web users (whether it be from website or someone using api)
if(Size == -1){
}
else if(Size == 0){
cout << "WEB GONE: " << *it << endl;
webUsers.erase(it++);
}
else if(Size > 0){
cout << "SIZE: " << Size << endl;
}
}
}
当尝试访问此函数中的UDP变量时发生异常:
int CSocket::receivemessage(int len, CBuffer*destination)
{
if(sockid<0)return -1;
int size = -1;
char* buff = NULL;
if(udp)
{
size = 8195;
buff = new char[size];
size = recvfrom(sockid, buff, size, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize);
} else
{
if(format == 0 && !len)
{
unsigned short length;
if(recv(sockid, (char*)&length, 2, 0) == SOCKET_ERROR)return -1;
buff = new char[length];
size = recv(sockid, buff, length, 0);
} else if(format == 1 && !len)
{
size = 65536;
buff = new char[size];
size = receivetext(buff, size);
} else if(format == 2 || len > 0)
{
buff = new char[len];
size = recv(sockid, buff, len, 0);
}
}
if(size > 0)
{
destination->clear();
destination->addBuffer(buff, size);
}
if(buff != NULL)delete buff;
return size;
}
但我的意思是udp和format等变量都已准备就绪...... CSocket对象是否可能已损坏? 我的意思是为什么这只是在刷新PHP页面这么多次之后才发生的? 是什么让它像这样腐败?