⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cabledriver.cpp

📁 PPP协议的实现演示
💻 CPP
字号:
#include "globals.h"#include "CableDriver.h"#ifdef WITH_CABLECCableDriver::CCableDriver(){#ifdef WIN32    WSADATA ws;    BOOL bSock = WSAStartup(0x0101, &ws);    if (bSock)	WSACleanup();#endif    m_sHost = new char[30];    m_sPort = new char[30];    m_sDev = new char[30];    m_sFull = new char[30];    m_sConnectIp = new char[30];    m_cParam = new CParamConfig[7];    m_cParam[0].DriverClass = "CCableDriver";    m_cParam[0].Msg = "Vers 0.5 Multi";    m_cParam[0].Author = "birdy57 & surfufu";    m_cParam[0].Guid = 0x8301;	//y=0 multi plateforme    m_cParam[1].Request = "FullDuplex";    m_cParam[1].Default = "No";    m_cParam[1].InitStr = m_sFull;    m_cParam[1].MaxBufferLen = 30;    m_cParam[2].Request = "Host";    m_cParam[2].Default = "americaonline.aol.com";    m_cParam[2].InitStr = m_sHost;    m_cParam[2].MaxBufferLen = 30;    m_cParam[3].Request = "Port";    m_cParam[3].Default = "5190";    m_cParam[3].InitStr = m_sPort;    m_cParam[3].MaxBufferLen = 30;    m_cParam[4].Request = "DeviceCable";    m_cParam[4].Default = "eth0";    m_cParam[4].InitStr = m_sDev;    m_cParam[4].MaxBufferLen = 30;    m_cParam[5].Request = "*ConnectIp";    m_cParam[5].Default = "0.0.0.0";    m_cParam[5].InitStr = m_sConnectIp;    m_cParam[5].MaxBufferLen = 30;    m_cParam[6].Request = NULL;    m_cParam[6].Default = NULL;    m_cParam[6].MaxBufferLen = 0;    m_bIsConnected = false;    m_MutexR = false;    m_MutexW = false;}CCableDriver::~CCableDriver(){#ifdef WIN32    WSACleanup();#endif    delete m_sConnectIp;    delete m_sFull;    delete m_sHost;    delete m_sPort;    delete m_sDev;    delete[]m_cParam;}//  Connectionbool CCableDriver::Connect(){    bool bRet = false;    int sin_len = sizeof(struct sockaddr_in);    struct hostent *hp;    char *hostname = m_sHost;    int port = strtoul(m_sPort, NULL, 10);    struct sockaddr_in sin;    struct in_addr adresse;    // Determine si il est fullduplex ou non    if (strstr(m_sFull, "Yes") != NULL)	m_bFullDuplex = true;    else	m_bFullDuplex = false;    hp = gethostbyname(hostname);    if (hp) {	sin.sin_addr.s_addr = *(unsigned long *) hp->h_addr;	adresse.s_addr = sin.sin_addr.s_addr;	strcpy(m_sConnectIp, inet_ntoa(adresse));	if ((m_nSocket = socket(PF_INET, SOCK_STREAM, 0)) >= 0) {	    sin.sin_family = PF_INET;	    sin.sin_port = htons(port);	    if ((connect(m_nSocket, (struct sockaddr *) &sin, sin_len)) ==		0)		bRet = true;	}    }    if (bRet)	m_bIsConnected = true;    return bRet;}// Deconnection bool CCableDriver::Disconnect(){    bool bRet;    m_bIsConnected = false;    bRet = closesocket(m_nSocket) == 0;    return bRet;}// Lecture de nSize octet(s) int CCableDriver::Read(char *pData, int nSize){    int nRet;    // Teste si mutex ou non    while ((!m_bFullDuplex) && m_MutexR)	usleep(1000);    m_MutexR = true;    CNullDriver::Read(pData, nSize);    nRet = recv(m_nSocket, (char *) pData, nSize, 0);    m_MutexR = false;    return nRet;}// Ecriture de nSize octet(s), // la fonction retourne le nombre d'octet reelement ecrit ou ERROR int CCableDriver::Write(char *pData, int nSize){    int nRet;    // Teste si mutex ou non    while ((!m_bFullDuplex) && m_MutexW)	usleep(1000);    m_MutexW = true;    CNullDriver::Write(pData, nSize);    nRet = send(m_nSocket, (char *) pData, nSize, 0);    m_MutexW = false;    return nRet;}CParamConfig *CCableDriver::GetRequest(){    return m_cParam;}/** teste si la connection ip est ok */bool CCableDriver::IsAvailable(){    bool bRet = false;    struct hostent *hp;    char *hostname = m_sHost;    hp = gethostbyname(hostname);    if (hp)	bRet = true;    return bRet;}/** connecte ? */bool CCableDriver::IsConnected(){    return (m_bIsConnected);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -