/* 功能:客户端函数,发起TCP连接 参数: lpszHostAddress LPCTSTR [In] 对方Ip地址或域名 nHostPort UINT [In] 对方监听的端口 返回值:成功返回TRUE,失败返回FALSE */ bool Socket::Connect( const char *lpszHostAddress, unsigned short nHostPort, long lSecond ) { if ( NULL == lpszHostAddress ) return false; //将域名转换为真实IP,如果lpszHostAddress本来就是ip,不影响转换结果 char ip[64]; //真实IP #ifdef WIN32 PHOSTENT hostinfo; #else struct hostent * hostinfo; #endif strcpy( ip, lpszHostAddress ); if((hostinfo = gethostbyname(lpszHostAddress)) != NULL) { strcpy( ip, inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list) ); } //使用真实ip进行连接 sockaddr_in sockAddr; memset(&sockAddr,0,sizeof(sockAddr)); sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = inet_addr(ip); sockAddr.sin_port = htons( nHostPort ); SetSendTimeout(lSecond, 0); if ( SOCKET_ERROR != connect(m_hSocket, (sockaddr*)&sockAddr, sizeof(sockAddr)) ) { SetSendTimeout(0, 0); InitPeerAddress(); InitLocalAddress(); return true; } SetSendTimeout(0, 0); return false; }
/* 功能:绑定一个socket句柄,让该类对象在这个句柄上进行操作 逻辑: 傻瓜式绑定,不管类对象之前是否已经绑定了其它套接字,首先会调用傻瓜式函数close关闭连接,然后在绑定新的套接字, 如果没有实现调用Detach解除旧绑定,那么旧的绑定sock将丢失 参数: hSocket SOCKET [In] 要绑定sock句柄 */ void Socket::Attach(SOCKET hSocket) { m_hSocket = hSocket; m_bBlock = true; m_bOpened = true;//未打开状态 InitPeerAddress(); InitLocalAddress(); }
void Socket::Attach(SOCKET hSocket) { m_hSocket = hSocket; m_bIsBlock = true; m_bIsOpen = true; InitPeerAddress(); InitLocalAddress(); }
Socket::Socket( SOCKET hSocket, protocol nProtocolType ) { m_hSocket = hSocket; m_bBlock = true; m_bOpened = false;//未打开状态 Init(nProtocolType); InitPeerAddress(); InitLocalAddress(); }
Socket::Socket(SOCKET s, int proType) { m_hSocket = s; m_bIsBlock = true; m_bIsOpen = false; Init(proType); InitPeerAddress(); InitLocalAddress(); }
/* 功能:客户端函数,发起TCP连接 参数: lpszHostAddress LPCTSTR [In] 对方Ip地址 nHostPort UINT [In] 对方监听的端口 返回值:成功返回TRUE,失败返回FALSE */ bool Socket::Connect( const char *lpszHostAddress, unsigned short nHostPort) { assert( NULL != lpszHostAddress ); sockaddr_in sockAddr; memset(&sockAddr,0,sizeof(sockAddr)); sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = inet_addr(lpszHostAddress); sockAddr.sin_port = htons( nHostPort ); if ( SOCKET_ERROR != connect(m_hSocket, (sockaddr*)&sockAddr, sizeof(sockAddr)) ) { InitPeerAddress(); InitLocalAddress(); return true; } return false; }