1、不要依赖外部数据,如果要用外部数据,要有足够的校验,并注意外部数据的完整性和正确性
2、主线程不要有网络、IO同步操作,大量耗时操作要用异步
3、IP获取,直接从登陆服应该可以取到
4、客户端的稳定性也要有足够的重视
5、sprintf_s 是不安全的,慎用
建议用下面的API
RKT_API char* sstrcpyn(char* dest, const char* src, size_t destSize);
RKT_API int ssprintf_s(char* string, size_t sizeInBytes, const char* format, ...);
2、主线程不要有网络、IO同步操作,大量耗时操作要用异步
3、IP获取,直接从登陆服应该可以取到
4、客户端的稳定性也要有足够的重视
5、sprintf_s 是不安全的,慎用
建议用下面的API
RKT_API char* sstrcpyn(char* dest, const char* src, size_t destSize);
RKT_API int ssprintf_s(char* string, size_t sizeInBytes, const char* format, ...);
6、base里面的API多了解一下
这段代码的问题很多
大量访问导致138服务器崩溃,至于游戏客户端大量奔溃。
unsigned int GetLocalIpAddress()
{
char buf[MAX_PATH] = {0}; //把网页中读出的数据放在此处
char chTempIp[128] = {0};
char chIP[64] = {0}; //最终存放IP在此
//将网页数据写入c:\i.ini文件中
URLDownloadToFile(0, "http://iframe.ip138.com/ic.asp", "i.ini", 0, NULL);
FILE *fp = fopen("i.ini", "r");
if (fp != NULL)
{
fseek(fp, 0, SEEK_SET);
fread(buf, 1, MAX_PATH, fp);
fclose(fp);
//在buf中查找 [ 的位置, iIndex是buf中从[开始剩下的字符串,包括[这个字符串
char* iIndex = strstr(buf, "[");
if (iIndex)
{
sprintf(chTempIp, "%s", iIndex);
int nBuflen = strlen(chTempIp);
for (int i = 0; i < nBuflen; i++)
{
chIP[i] = chTempIp[i+1];
//如果发现有 ] 则截断
if (chTempIp[i] == ']')
{
chIP[i-1] = '\0';
}
}
}
}
remove("i.ini");
return htonl(inet_addr(chIP));
}

970

被折叠的 条评论
为什么被折叠?



