socket 调试,运行结果不一致,调试正确,运行错误

看着捉急 2012-10-23 09:35:20
我写了个简单的telnet客户端程序,登录Unix服务器,调试,运行结果不一致,调试正确,运行错误,郁闷啊,求高手指教,程序部分代码:
for (; ;)
{
TELNET tel;
Telnet telnet = &tel;
telnet->state = TOP_LEVEL;
telnet->s = hSocket;
int readBytes = ReadSocket(hSocket, pReadBuff);
do_telnet_read(telnet, pReadBuff, &readBytes);
if (0 != readBytes)
{
printf("%s", pReadBuff);
std::string s(pReadBuff);
if (std::string::npos != s.find("login:"))
{
bLogin = true;
}
}

if (bLogin)
{
// memset(pReadBuff, 0, 10240);
send(hSocket, pWriteBuff, strlen(pWriteBuff), 0);

int ret = recv(hSocket, pReadBuff, 10240, 0);
pReadBuff[ret] = 0;
ret = 0;
printf("%s", pReadBuff);

memset(pReadBuff, 0, 10240);
send(hSocket, pWriteBuff, strlen(pWriteBuff), 0);
memset(pReadBuff, 0, 10240);
ret = recv(hSocket, pReadBuff, 10240, 0);
pReadBuff[ret] = 0;
printf("%s", pReadBuff);



bLogin = false;
}

memset(pReadBuff, 0, 10240);
}
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
看着捉急 2012-10-23
  • 打赏
  • 举报
回复
我知道 lgstudyvc 你没有加载socket库,用 wsastartup
lgstudyvc 2012-10-23
  • 打赏
  • 举报
回复
借问下我的socket(AF_INET,SOCK_DGRAM,0)怎么老是失败呢?
lcwang12 2012-10-23
  • 打赏
  • 举报
回复
会不会是读内存读的慢,调试的时候体现不出来,但是一运行就跟不上了?
看着捉急 2012-10-23
  • 打赏
  • 举报
回复
呵呵,头都大了
水瓶座雨夕 2012-10-23
  • 打赏
  • 举报
回复
看起来没什么问题...呵呵 能力有限...
看着捉急 2012-10-23
  • 打赏
  • 举报
回复
我用这种方式,可不可以保证全部接收
int ReadSocket(SOCKET hSocket, char* pReadBuff)
{
int dwReadBytes = 0, dwTotal = 0;
char pBufferTmp[1024];
memset(pBufferTmp, 0, 1024);
int ret;
WSANETWORKEVENTS NetworkEvents;
WSAEVENT wsaEvent = WSACreateEvent();
WSAEventSelect(hSocket, wsaEvent, FD_READ);
for (; ;)
{
ret = WSAWaitForMultipleEvents(1,//数组中的句柄数目
& wsaEvent,//指向一个事件对象句柄数组的指针
FALSE, //T,都进才回;F,一进就回
0, //超时间隔
FALSE);//是否执行完成例程
if (ret == WSA_WAIT_FAILED || ret == WSA_WAIT_TIMEOUT)
{
break;
}
WSAEnumNetworkEvents(hSocket, wsaEvent, &NetworkEvents);

if (NetworkEvents.lNetworkEvents & FD_READ)
{
dwReadBytes = recv(hSocket, pBufferTmp, 1024, 0);
if (0 == dwReadBytes)
{
break;
}
memcpy(pReadBuff + dwTotal, pBufferTmp, dwReadBytes);
dwTotal += dwReadBytes;
dwReadBytes = 0;
}
}
return dwTotal;
}
水瓶座雨夕 2012-10-23
  • 打赏
  • 举报
回复
调试的时候会比正常运行慢很多 会不会是因为时间上的问题? read的时候做个检查,看看是否全部接收了数据? 呵呵 不知道对不对 个人意见...

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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