以下是我的程序,各位帮忙看看,为什么会那么慢
*********************************************/
#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);
从发送到接受为什么要十几秒呢。
*********************************************/
#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);
从发送到接受为什么要十几秒呢。
还有就是网络的原因
另外你这个程序是不是黑客程序,要登陆那个服务器
2、就是网络的延时也是一个不容忽视的问题,俺就曾经遇到过!
这并不是什么黑客程序,是要送命令给服务器,并接收返回结果。
并且不用SLEEP()就收不到返回信息,再说从发送到接收要十几秒,这个sleep(1500)1.5秒就算不上什么了。如果能提高到2秒,3秒的,我也心满意足了。
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);
}
2:对发送加一个判断,发送完成在接收,应该可以接收到
如》先测试发送的命令的长度,cmdlength;
如果发送的长度等于cmdlength,则发送成功,在接收
sendbyte=sendCMD;
if(sendbyte==cmdlength)
{
recv(.......);
}
3:需要长时间可能是你的服务端处理时间过长
肯定是因为服务器接收到信息后很久才发送信息回来。你跟踪调试一下服务器端就知道结果了。