일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- file access
- digitalRead
- preprocessing
- UNO
- java
- length
- parameter
- flutter
- atmega328
- stream
- Class
- sensor
- Unity
- Contour
- aduino
- memory
- wpf
- Binary
- public
- Pointer
- SERIAL
- Overloading
- Android
- mfc
- compare
- Barcode
- APP
- inheritance
- Encapusulation
- Read
- Today
- Total
폴크(FOLC)
MFC 테크닉 - 통신 Socket ( Heartbeat - Send/Recv ) 본문
MFC 테크닉 - 통신 Socket ( Heartbeat - Send/Recv )
folcjin 2021. 12. 7. 20:19# TCP/IP 로 통신을 진행하는 상태 확인
> 1:1, 1:N, N:1
> 통신 연결을 사용하고 있는 PC 의 socket 에 직접 데이터를 전달
- 약속된 파라미터 값을 전달
# Socket 에서 약속된 파라미터 값을 설정된 시간 동안 데이터 송/수신이 없는 경우 socket 을 제거하고 연결 상태를 해제 시킨다. ( 리소스 삭제 )
> 별도의 Thread 로 파라미터를 송신, OnReceive 에서 파라미터 수신
> 비 정상 종료로 인해서 socket 을 사용하지 못하는 경우 ( 예외 처리 용 )
> LanCable 을 제거 했거나 통신 선로 상의 문제가 발생하는 경우 ( 예외 처리 용 )
# 소스 코드 ( CSocket 상속 받은 클래스 )
// 약속된 파라미터 전송 - 3초 간격
UINT CClientSocket::ThreadRun(void *params)
{
CClientSocket*pThis = (CClientSocket*)params;
if(pThis != nullptr)
{
DWORD dwHBPeriodStartTime = GetTickCount();
while (1)
{
// heart beat 확인 - 수신 데이터
pThis->ThreadRun(dwHBPeriodStartTime);
}
}
return 0;
}
void CClientSocket::ThreadRun(DWORD &period)
{
if(3000 < (GetTickCount() - period))
{
Send((LPCTSTR)m_strHBMesg, m_strHBMesg.GetLength() * 2);
period = GetTickCount();
}
}
// 약속된 파라미터 수신 - 3초 간격
void CClientSocket::OnReceive(int nErrorCode)
{
CString strMessage = _T("");
// 전달된 데이터(문자열)가 있을 경우
TCHAR strBuffer[1024];
ZeroMemory(strBuffer, sizeof(strBuffer));
if (0 < Receive(strBuffer, sizeof(strBuffer)))
{
strMessage = CString(strBuffer);
m_dwHBStartTime = GetTickCount();
}
SendMessage(m_hWnd, WM_CLIENT_MSG_RECV, NULL, (LPARAM)((LPCTSTR)strTmp));
CAsyncSocket::OnReceive(nErrorCode);
}
// 제한 시간이 지나면 연결 끊김으로 처리 - 20초
void CClientSocket::IsTimeOver()
{
if(20000 < (GetTickCount() - m_dwHBStartTime))
{
SendMessage(m_hWnd, WM_CLIENT_CLOSE, NULL, NULL);
}
}
'C, C++, MFC > C, C++, MFC 테크닉' 카테고리의 다른 글
MFC 테크닉 - 파일 제어 ( INI format ) (0) | 2021.12.12 |
---|---|
MFC 테크닉 - 파일 제어( BIN format ) (0) | 2021.12.11 |
MFC 테크닉 - 통신 WinSock ( Client ) (0) | 2021.11.23 |
MFC 테크닉 - OOP (0) | 2021.11.21 |
MFC 테크닉 - 통신 CSocket (0) | 2021.11.16 |