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

📄 comtowebdlg.cpp

📁 使用Socket和多线程技术实现远程通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if(-1 != pApp.m_nPort)
	{
		CTime	time = CTime::GetCurrentTime();
		char str[512];	
		sprintf(str, "【%s】\r\n 串口端口号为:%d\r\n",
					time.Format("%Y-%m-%d %H:%M:%S 类型:系统"), pApp.m_nPort);
		m_sState += str;
		m_ctrlState.SetWindowText(m_sState);
		int nLines = m_ctrlState.GetLineCount();
		m_ctrlState.LineScroll(nLines);


		pApp.m_bComFound = TRUE;
	
		time = CTime::GetCurrentTime();
		sprintf(str, "【%s】\r\n 正在连接服务器,请等待...\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
		m_sState += str;
		m_ctrlState.SetWindowText(m_sState);
		nLines = m_ctrlState.GetLineCount();
		m_ctrlState.LineScroll(nLines);
		ConnectToSever();
	}
	else
	{
		pApp.m_nPort = 3;
		CTime	time = CTime::GetCurrentTime();
		char str[512];	
		sprintf(str, "【%s】\r\n 没有找到监护仪,请确认监护仪已连接好!\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
		m_sState += str;
		m_ctrlState.SetWindowText(m_sState);
		int nLines = m_ctrlState.GetLineCount();
		m_ctrlState.LineScroll(nLines);
	
	}
	m_bFindComm = FALSE;
//	SetEvent(m_hFindCom);
		
}

void CComToWebDlg::ConnectToSever()
{
	if(m_pClientSocket)
	{
		delete m_pClientSocket;
		m_pClientSocket = NULL;
	}
	m_pClientSocket = new CClientSocket(this);	
	if(!(m_pClientSocket->Create(0, SOCK_STREAM, AfxGetHostIP() )))
	{
		AfxMessageBox("请重新手动启动应用程序!");
		return;
	}
	
	if(m_bSerialInited)
		TRACE("reconnect\n");
	if(m_pClientSocket->Connect(pApp.m_sSeverAddr, pApp.m_nSeverPort))
	{
		pApp.m_bConnected = TRUE;
		if(m_nCurTimer > 0)
			KillTimer(m_nCurTimer);
		
		char* pData = new char[ m_sSerial.GetLength()+5];
		sprintf(pData, "%c%c%c%s%c%c", 0XAA, 0XAA, 0X01,m_sSerial, 0XEE, 0XEE);
		memset(pData+m_sSerial.GetLength()+5, 0x00, 1);
		int n = strlen(pData);
		
		m_pClientSocket->Send(pData, strlen(pData), 0);

		CTime	time = CTime::GetCurrentTime();
		char str[512];	
		sprintf(str, "【%s】\r\n 连接服务器成功!\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
		m_sState += str;
		m_ctrlState.SetWindowText(m_sState);
		int nLines = m_ctrlState.GetLineCount();
		m_ctrlState.LineScroll(nLines);
	
		TRACE("connect succeed\n");		
	}
	
}


LONG CComToWebDlg::OnComReceive(WPARAM ch, LPARAM port)
{	
	static nCnt = 0;
	if(!(pApp.m_bConnected))
		return 0L;
	m_pBuffer[nCnt] = (char)(ch);

	nCnt ++;	
	if(nCnt >= COM_BUFFER_LEN)
	{
		TRACE("m_pBuffer = %s\n", m_pBuffer);
		nCnt = 0;
		if(SOCKET_ERROR == m_pClientSocket->Send(m_pBuffer, COM_BUFFER_LEN, 0))
		{
	//		m_SerialPort.ClosePort();
			int nError = GetLastError();
			
			CTime	time = CTime::GetCurrentTime();
			char str[512];	
			sprintf(str, "【%s】\r\n 服务器端程序退出!\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
			m_sState += str;
			m_ctrlState.SetWindowText(m_sState);
			int nLines = m_ctrlState.GetLineCount();
			m_ctrlState.LineScroll(nLines);

			if(nError == WSAECONNRESET)
			{
				TRACE("socket error\n");
				pApp.m_bConnected = FALSE;
//				m_SerialPort.PauseThread();					
				m_pClientSocket->Close();
				if(m_pClientSocket)
				{
					delete m_pClientSocket;
					m_pClientSocket = NULL;
				}
		//		ConnectToSever();		
				
			}
		}
			
		memset(m_pBuffer, 0x00, COM_BUFFER_LEN);
	}
	return 0L;
}

BOOL CComToWebDlg::DestroyWindow() 
{
//	m_SerialPort.ClosePort();				
	m_shellIcon.DeleteIcon();
	if(m_pBuffer)
	{
		delete []m_pBuffer;
		m_pBuffer = NULL;
	}
	return CDialog::DestroyWindow();
}
LRESULT CComToWebDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
{
	if(LOWORD(lParam) == WM_LBUTTONDBLCLK)
	{
		ShowWindow(SW_SHOW);
	}
	if (LOWORD(lParam) == WM_RBUTTONDOWN)
	{
		CPopupMenu cMenu;
		cMenu.CreatePopupMenu();
		cMenu.Load(IDR_CONTROL);
	    
		CPoint pt;
		GetCursorPos(&pt);
		cMenu.Display(pt, this);
		
	}

	return 0;
}

void CComToWebDlg::OnQuit()
{
	AfxGetMainWnd()->PostMessage(WM_CLOSE);	
	AfxMessageBox("aa");
	CDialog::OnOK();
}


void CComToWebDlg::OnOK() 
{
	// TODO: Add extra validation here

	BYTE addr0, addr1, addr2, addr3;
	m_ctrlCenterIpAddr.GetAddress(addr0, addr1, addr2, addr3);
	pApp.m_sSeverAddr.Format("%d.%d.%d.%d", addr0, addr1, addr2, addr3);

	
	if(m_nCurTimer > 0)
		KillTimer(m_nCurTimer);
	if(m_pClientSocket)
	{
		m_pClientSocket->Close();
		delete m_pClientSocket;
		m_pClientSocket = NULL;
	}
	if(m_nCurTimer >0)
		KillTimer(m_nCurTimer);
	CDialog::OnOK();
}

HBRUSH CComToWebDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CreateSolidBrush(RGB(0xde, 0xee, 0x9e));// = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	pDC->SetBkMode(TRANSPARENT);
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

void CComToWebDlg::OnStart() 
{
	UpdateData(TRUE);	
	if(0 == strcmp(_T(""), m_sSerial))
	{
		MessageBox(_T("请输入仪器编号"), _T("提示"), MB_ICONINFORMATION);
		return;
	}	
	
	BYTE addr0, addr1, addr2, addr3;
	m_ctrlCenterIpAddr.GetAddress(addr0, addr1, addr2, addr3);
	pApp.m_sSeverAddr.Format("%d.%d.%d.%d", addr0, addr1, addr2, addr3);
	
	/*
	if(0 == (m_nCurTimer = SetTimer(TIMER_FIND_COM, FIND_COM_ELAPSE, NULL)))
		{
			AfxMessageBox("请重新手动启动应用程序!");
			return;
		}*/
	
	CTime	time = CTime::GetCurrentTime();
	char str[512];	
	sprintf(str, "【%s】\r\n 正在搜索串口端口号...\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
	m_sState += str;
	m_ctrlState.SetWindowText(m_sState);
	int nLines = m_ctrlState.GetLineCount();
	m_ctrlState.LineScroll(nLines);
	FindComPort();

	
}

void CComToWebDlg::OnStartCommThread(WPARAM wParam, LPARAM lParam)
{
	if(m_bSerialInited)
	{
		TRACE("reconnect\n");
		m_SerialPort.RestartThread();
	}
	else
	{
		m_bSerialInited = TRUE;			
		m_SerialPort.StartThread();
	}

	m_nCurTimer = SetTimer(TIMER_MNTR, MNTR_TIMER_ELAPSE, NULL);
	m_tmStart = CTime::GetCurrentTime();

	CTime	time = CTime::GetCurrentTime();
	char str[512];	
	sprintf(str, "【%s】\r\n 正在采集数据...\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
	m_sState += str;
	m_ctrlState.SetWindowText(m_sState);
	int nLines = m_ctrlState.GetLineCount();
	m_ctrlState.LineScroll(nLines);

}

void CComToWebDlg::OnReConnect(WPARAM wParam, LPARAM lParam)
{
	ConnectToSever();
//	m_nCurTimer = SetTimer(TIMER_CONNECT_SEVER, CONNECT_SEVER_ELAPSE, NULL);
}

/*
void CComToWebDlg::OnStopMntr() 
{
	if(m_SerialPort.IsThreadAlive())
	{
		m_SerialPort.PauseThread();	
		m_SerialPort.ClosePort();
	}
	if(m_pClientSocket)
	{
		m_pClientSocket->Close();
		delete m_pClientSocket;
		m_pClientSocket = NULL;
	}
	CTime	time = CTime::GetCurrentTime();
	char str[512];	
	sprintf(str, "【%s】\r\n 已经停止数据采集!\r\n",	time.Format("%Y-%m-%d %H:%M:%S 类型:系统"));
	m_sState += str;
	m_ctrlState.SetWindowText(m_sState);
	int nLines = m_ctrlState.GetLineCount();
	m_ctrlState.LineScroll(nLines);
}*/


void CComToWebDlg::OnChangeSnEdit() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
//	UpdateData(FALSE);
	UpdateData(TRUE);
}


void CComToWebDlg::OnFieldchangedCenterIpaddr(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	*pResult = 0;
}

⌨️ 快捷键说明

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