int ScreenCap::CreateCapturethread() { int ret = RET_SUCESS; int w = QApplication::desktop()->width(); int h = QApplication::desktop()->height(); qDebug("screen rect,w:%d h:%d\n", w, h); if(RET_SUCESS != CreateTcpSocket()) { qDebug("create tcp socket faild!!\n"); return RET_FAIL; } pCapThread = new CapThread(w, h, NULL); qDebug() << "pCapThread start addr:" << pCapThread; //ctrl pthread of capthread connect(this,SIGNAL(emitCtrlPthreadStart()),pCapThread, SLOT(SetStartThread()),Qt::QueuedConnection); connect(this,SIGNAL(emitCtrlPthreadStop()),pCapThread, SLOT(SetStopThread()),Qt::QueuedConnection); connect(this,SIGNAL(emitCtrlPthreadQuit()),pCapThread, SLOT(SetQuitThread()),Qt::QueuedConnection); return RET_SUCESS; }
BOOL CSSLTcpSocket::CreateSSLTcpSocketForClient() { SSL_load_error_strings(); /*为打印调试信息作准备*/ OpenSSL_add_ssl_algorithms(); /*初始化*/ m_meth = (SSL_METHOD *)TLSv1_client_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定,TLSv1_server_method,SSLv23_server_method()*/ m_ctx = SSL_CTX_new (m_meth); //设置为要求强制校验对方(客户端)证书SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT SSL_CTX_set_verify(m_ctx,SSL_VERIFY_NONE,NULL); /*验证与否SSL_VERIFY_PEER*/ //SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/ //RAND_seed // if (!SSL_CTX_check_private_key(m_ctx)) { // printf("密钥证书不匹配!\n"); // } // SSL_CTX_set_cipher_list(m_ctx,"DES-CBC3-SHA"); // SSL_CTX_set_mode(m_ctx, SSL_MODE_AUTO_RETRY); CreateTcpSocket(); m_ssl = SSL_new (m_ctx); SSL_set_fd (m_ssl, m_TcpSock); return FALSE; }
BOOL CSSLTcpSocket::CreateSSLTcpSocketForServer( LPCSTR pszCertFile , LPCSTR pszKeyFile ) { SSL_load_error_strings(); /*为打印调试信息作准备*/ OpenSSL_add_ssl_algorithms(); /*初始化*/ m_meth = (SSL_METHOD *)TLSv1_server_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定,TLSv1_server_method,SSLv23_server_method()*/ m_ctx = SSL_CTX_new (m_meth); //设置为要求强制校验对方(客户端)证书SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT SSL_CTX_set_verify(m_ctx,SSL_VERIFY_NONE,NULL); /*验证与否SSL_VERIFY_PEER*/ //SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/ if (SSL_CTX_use_certificate_file(m_ctx, pszCertFile, SSL_FILETYPE_PEM) <= 0) { printf("加载证书失败!\n"); } if (SSL_CTX_use_PrivateKey_file(m_ctx, pszKeyFile, SSL_FILETYPE_PEM) <= 0) { printf("加载私钥失败!\n"); } if (!SSL_CTX_check_private_key(m_ctx)) { printf("密钥证书不匹配!\n"); } SSL_CTX_set_cipher_list(m_ctx,"DES-CBC3-SHA"); SSL_CTX_set_mode(m_ctx, SSL_MODE_AUTO_RETRY); return CreateTcpSocket(); }
void ScreenCap::on_pushButtonStart_clicked() { qDebug("here!\n"); qDebug("mNo:%d",mNo); if(0 == ((mNo++)%2)) /* 传输结束 */ { qDebug("here!1111111\n"); StopActionSets(); } else /* 开始传输 */ { qDebug() << " To start!!"; qDebug() << " isStarted:" << isStarted; BtnStopPix();//显示停止图片 if(STAT_RESTOP == isStarted)//需要重新连接 { showTextConnecting(); if(RET_SUCESS != CreateTcpSocket())//重新建立socket { qDebug("create tcp socket faild!!\n"); BtnStartPix();//显示开始图片 showTextClickToStart();//显示点击传输 mNo = NO_FIRST;// qDebug() << " No started!!"; return; } qDebug("recreate tcp socket ok!\n"); emit emitCtrlPthreadStart(); pNetSendTimer->start();//发送数据定时器 showTextTransfering();//连接成功 qDebug() << " restarting!!"; isStarted = STAT_RESTART; return; } //开始传输 if(STAT_STOPPED == CaptureScreenOn())//建立连接 { BtnStartPix();//显示开始图片 showTextClickToStart();//显示点击传输 mNo = NO_FIRST;// qDebug() << " No started!!"; } else { showTextTransfering();//连接成功 qDebug() << " starting!!"; } } }
//return values: // 0 - succeed // 1 - non-block,结果pending,调用者随后需要调用IsSocketWritable来查询结果; //其它 - 失败 DWORD CTcpClientSocketHelper::Init(DWORD dwIp, DWORD dwPort, WORD wBindLocalPort/*=0*/, BOOL bBlock/*=TRUE*/,DWORD dwConnectTimeOut/*=0*/) { m_dwServerIp = dwIp; m_dwServerPort = (WORD)dwPort; if (!CreateTcpSocket(bBlock)) { return 2; } return ConnectToServer(wBindLocalPort, dwConnectTimeOut); }
BOOL CTcpServerSocketHelper::CreateListenSocket(DWORD dwListenPort/*=0*/) { m_dwListenPort = dwListenPort; if (!CreateTcpSocket(TRUE)) { return FALSE; } BOOL bOpt = TRUE; ::setsockopt (m_Socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&bOpt, sizeof (bOpt)); if (!Bind()) { return FALSE; } if (!Listen()) { return FALSE; } return TRUE; }
DWORD CTcpServerSocketHelper::Start(ITcpServerSocketHelper_Event *pEvent, DWORD dwListenPort/*=0*/,BOOL bReadData/*=TRUE*/) { DWORD dwResult = -1; DWORD threadID = 0; m_pEvent = pEvent; m_dwListenPort = dwListenPort; if (!CreateTcpSocket(TRUE)) { dwResult = 1; goto Exit0; } BOOL bOpt = TRUE; ::setsockopt (m_Socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&bOpt, sizeof (bOpt)); if (!Bind()) { dwResult = 2; goto Exit0; } if (!Listen()) { dwResult = 3; goto Exit0; } m_hTerminateAcceptThreadEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL); if (!m_hTerminateAcceptThreadEvent) { dwResult = 4; goto Exit0; } m_hAcceptThreadHandle = (HANDLE)::CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)_AcceptThreadProc, this, 0, &threadID ); if (!m_hAcceptThreadHandle) { dwResult = 5; goto Exit0; } if (bReadData) { m_hTerminateReadDataThreadEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL); if (!m_hTerminateReadDataThreadEvent) { dwResult = 6; goto Exit0; } m_hReadDataThreadHandle = (HANDLE)::CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)_ReadDataThreadProc, this, 0, &threadID ); if (!m_hReadDataThreadHandle) { goto Exit0; } } dwResult = 0; Exit0: if (0 != dwResult) { Stop(); } if (dwResult == 0) { return m_dwListenPort; } return (DWORD)-1; }