Thread::Thread (const char *pUser, const char *pPwd, const char *pIP, const char *pInterface,QObject *parent):
QThread(parent)
{
stoped=false;
socketIsOk=false;
svrIP=(char *)pIP;
interFace=(char *)pInterface;
user=(char *)pUser;
pwd=(char *)pPwd;
if ((m_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("failed to create socket in login !\n");
return ;
}
void Thread::run()
{
char chUser[6] = "admin";
char chPwd[11] = "greenway";
char chIP[16] = "192.168.10.211";
char chInterface[9] = "eth0";
char chSerialNumber[16] = "GT812D081200205";
login(m_sock,chUser, chPwd, chIP, chInterface) ;
exec();
}
login在另一个文件
int login(int sock,const char *pUser, const char *pPwd, const char *pIP, const char *pInterface)
{
struct sockaddr_in SockAddr;
struct sockaddr_in dest_addr;
struct hostent *host;
struct servent *lpServent;
unsigned long ulAaddr ;
char *recvbuf ;
char szCommand[256];
struct timeval timeout;
int m_sock=sock;
recvbuf=new char[1024];
PDEBUG("svrIP=%s,pInterface=%s\n",pIP,pInterface);
memset(&SockAddr, 0, sizeof(SockAddr));
lpServent = getservbyname("www", "tcp");
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = inet_addr(pIP);
SockAddr.sin_port = lpServent->s_port;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
//判断是主机名还是ip地址
if ((ulAaddr = inet_aton(pIP, &(dest_addr.sin_addr))) == 0)
{ printf("3\n");
if ((host = gethostbyname(pIP)) == NULL) //是主机名
{
printf("gethostbyname error in login !\n");
return -1;
}
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = lpServent->s_port;
memcpy((char *)&dest_addr.sin_addr, host->h_addr, host->h_length);
bzero(&(dest_addr.sin_zero), 8);
}
else
{
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = lpServent->s_port;
dest_addr.sin_addr.s_addr = inet_addr(pIP);
bzero(&(dest_addr.sin_zero), 8);
}
//connecte server
if (connect(m_sock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1)
{
printf("connect error in login !\n");
close(m_sock);
return -1;
}
PDEBUG("socket connect is ok\n");
}