以下是我的程序,各位帮忙看看,为什么会那么慢
*********************************************/
    #define DEFAULT_BUFFER 128
char szHost[128] = {0};
int iPort = 9999;
char recvBuf[DEFAULT_BUFFER];
SOCKET m_Socket;
struct sockaddr_in addr;
WSADATA wsd; strcpy(szHost, "132.107.47.11");
if(WSAStartup(MAKEWORD(2,2), &wsd) != 0)
return -1;
addr.sin_family = AF_INET;
addr.sin_port = htons(iPort);
addr.sin_addr.s_addr = inet_addr(szHost);int result;
char qq[128];
/////////////////////////////////////////////////
int iRet;
m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(m_Socket == INVALID_SOCKET)
continue;
if(connect(m_Socket, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
continue;
strcpy(qq,"login;");
sendCmd(m_Socket, qq);
Sleep(1500);//这里为什么要SLEEP(),已经用了阻塞模式了呀
recv(m_Socket, recvBuf, DEFAULT_BUFFER, 0);
从发送到接受为什么要十几秒呢。

解决方案 »

  1.   

    干吗sleep呢?
    还有就是网络的原因
      

  2.   

    Sleep(1500) 是问题的关键,每次会话都要延迟1。5秒
    另外你这个程序是不是黑客程序,要登陆那个服务器
      

  3.   

    1、可能是你的Sleep的原因
    2、就是网络的延时也是一个不容忽视的问题,俺就曾经遇到过!
      

  4.   

    不用sleep()就recv不到数据,我也感觉奇怪。请高手指点
      

  5.   

    sendCmd(m_Socket, qq)这是什么意思
      

  6.   

    to ProgrameMan():
       这并不是什么黑客程序,是要送命令给服务器,并接收返回结果。
       并且不用SLEEP()就收不到返回信息,再说从发送到接收要十几秒,这个sleep(1500)1.5秒就算不上什么了。如果能提高到2秒,3秒的,我也心满意足了。
      

  7.   

    to singlehero():我用pb写的程序连同样的服务器是很快的。
      

  8.   

    把sendCmd函数的代码贴出来看看。。如果是阻塞的肯定不用sleep的。。再说即使是非阻塞的,也不应该这样写代码。。
      

  9.   

    sendCmd函数如下:
     int sendCmd(SOCKET s, char cmd[])
    {
    char buf[128];
    memset(buf,0,128);
    int len1 = strlen(cmd);
    buf[0] = 0x02;
    memcpy(buf+1, cmd, len1);
    buf[len1+1] = '\n';
    buf[len1+2] = 0x03;
    buf[len1+3] = '\0';
    return send(s, buf, len1+3, 0);
    }
      

  10.   

    那就没道理了,sendCmd就是简单的调用send,可以确定可以把sleep去掉。。
      

  11.   

    1:阻塞发送,不需要sleep
    2:对发送加一个判断,发送完成在接收,应该可以接收到
       如》先测试发送的命令的长度,cmdlength;
       如果发送的长度等于cmdlength,则发送成功,在接收
       sendbyte=sendCMD;
       if(sendbyte==cmdlength)
       {
         recv(.......);
        }
    3:需要长时间可能是你的服务端处理时间过长
      

  12.   

    再怎么慢也不可能慢到10多秒那么离谱的。Sleep(1500);也没理由出什么问题。
    肯定是因为服务器接收到信息后很久才发送信息回来。你跟踪调试一下服务器端就知道结果了。