socket FTP服务器中一用dir功能就停止工作

qq_35402305 2017-01-04 10:39:40
本人小白 用VS2013 实现简单的ftp服务器 其他功能正常 但一使用dir功能查看目录文件 客户端就会停止工作
各位大神求帮忙指点
...全文
238 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-05
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
cutmelon 2017-01-05
  • 打赏
  • 举报
回复
另外,由于tcp的特性,你服务器端虽然一次发一行,客户端接收到的时候可能是多行,这时也会造成szBuffer的越界
cutmelon 2017-01-05
  • 打赏
  • 举报
回复
引用 4 楼 qq_35402305 的回复:
[quote=引用 3 楼 cutmelon的回复:]szBuffer[ret]='\0'; 这句错了吧, szBuffer[ret]=0; 才是正道
这里应该是'\0' 空字符没错[/quote] 嗯,我不习惯这么用转义符。 不过你这里的szBuffer大小开的有问题,ret=recv(...)这里返回的是接收到的字节数,也就是说可能是80,szBuffer[80]就明显越界了,我猜你这服务器的运行路径巨深
sevancheng 2017-01-04
  • 打赏
  • 举报
回复
调试下就知道哪里出错了
qq_35402305 2017-01-04
  • 打赏
  • 举报
回复
引用 3 楼 cutmelon的回复:
szBuffer[ret]='\0'; 这句错了吧, szBuffer[ret]=0; 才是正道
这里应该是'\0' 空字符没错
cutmelon 2017-01-04
  • 打赏
  • 举报
回复
szBuffer[ret]='\0'; 这句错了吧, szBuffer[ret]=0; 才是正道
Dobzhansky 2017-01-04
  • 打赏
  • 举报
回复
先用 windows 自带的 ftp 命令测试下
ftp 的 dir 返回的数据是有一定格式的。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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