@@ -121,135 +121,7 @@ void CFastMainDialog::ProcessPipeMsg(int lMsgId, char* pData, int lLen)
LogOutToFile ( " HttpServiceListener::OnRecvRequest End " ) ;
}
// TCP<43> <50> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߳<EFBFBD>
/*UINT CFastMainDialog::TCPListenerThread(LPVOID pParam) {
CFastMainDialog* pThis = (CFastMainDialog*)pParam;
SOCKET hServer = pThis->m_hServerSocket;
while (true) {
SOCKET hClient = accept(hServer, NULL, NULL);
if (hClient == INVALID_SOCKET) continue;
char buffer[4096];
int bytesRecv = recv(hClient, buffer, sizeof(buffer), 0);
if (bytesRecv > 0) {
CString strMsg(buffer, bytesRecv);
pThis->ProcessTCPMessage(strMsg);
}
closesocket(hClient);
}
return 0;
}*/
UINT CFastMainDialog : : TCPListenerThread ( LPVOID pParam ) {
CFastMainDialog * pThis = ( CFastMainDialog * ) pParam ;
SOCKET hServer = pThis - > m_hServerSocket ;
while ( true ) {
SOCKET hClient = accept ( hServer , NULL , NULL ) ;
if ( hClient = = INVALID_SOCKET ) continue ;
// <20> <> <EFBFBD> <EFBFBD> Nagle<6C> 㷨<EFBFBD> <E3B7A8> <EFBFBD> <EFBFBD> ѡ <EFBFBD> <D1A1>
int optval = 1 ;
setsockopt ( hClient , IPPROTO_TCP , TCP_NODELAY , ( char * ) & optval , sizeof ( optval ) ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <D6B1> <EFBFBD> <EFBFBD> <EFBFBD> ӹر<D3B9>
char buffer [ 4096 ] ;
while ( true ) {
int bytesRecv = recv ( hClient , buffer , sizeof ( buffer ) , 0 ) ;
if ( bytesRecv < = 0 ) { // <20> <> <EFBFBD> ӶϿ<D3B6> <CFBF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
LogOutToFile ( " [TCP] Client disconnected or error: %d " , WSAGetLastError ( ) ) ;
break ;
}
CString strMsg ( buffer , bytesRecv ) ;
pThis - > ProcessTCPMessage ( strMsg ) ;
}
closesocket ( hClient ) ; // <20> <> <EFBFBD> չر<D5B9> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD>
}
return 0 ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> յ<EFBFBD> <D5B5> <EFBFBD> TCP<43> <50> Ϣ
void CFastMainDialog : : ProcessTCPMessage ( const CString & strJson ) {
LogOutToFile ( " FAST::ProcessTCPMessage Received: %s " , strJson ) ;
Json : : Reader reader ;
Json : : Value root ;
if ( ! reader . parse ( ( LPCTSTR ) strJson , root ) ) {
LogOutToFile ( " JSON parse error! " ) ;
return ;
}
// <20> <> ֤<EFBFBD> <D6A4> Ҫ<EFBFBD> ֶ<EFBFBD>
if ( ! root . isMember ( " receiver " ) | | ! root . isMember ( " type " ) ) {
LogOutToFile ( " Invalid message format " ) ;
return ;
}
// ͨ<> <CDA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ƽ ̨<C6BD> ӿ<EFBFBD> ת<EFBFBD> <D7AA>
CString strReceiver = root [ " receiver " ] . asString ( ) . c_str ( ) ;
int nMsgType = root [ " type " ] . asInt ( ) ;
Json : : Value params = root . get ( " params " , Json : : nullValue ) ;
theApp . SendMsg2Platform ( strReceiver , nMsgType , params ) ;
}
// <20> <> <EFBFBD> <EFBFBD> TCP<43> <50> <EFBFBD> <EFBFBD>
void CFastMainDialog : : StartTCPServer ( )
{
// 1. <20> <> ʼ <EFBFBD> <CABC> Winsock
WSADATA wsaData ;
int wsResult = WSAStartup ( MAKEWORD ( 2 , 2 ) , & wsaData ) ;
if ( wsResult ! = 0 ) {
LogOutToFile ( " [TCP] WSAStartup failed: %d " , wsResult ) ;
return ;
}
// 2. <20> <> <EFBFBD> <EFBFBD> Socket
m_hServerSocket = socket ( AF_INET , SOCK_STREAM , IPPROTO_TCP ) ;
if ( m_hServerSocket = = INVALID_SOCKET ) {
LogOutToFile ( " [TCP] Socket creation failed: %d " , WSAGetLastError ( ) ) ;
WSACleanup ( ) ;
return ;
}
// 3. <20> <> <EFBFBD> ö˿ڸ<CBBF> <DAB8> ã<EFBFBD> <C3A3> <EFBFBD> ѡ <EFBFBD> <D1A1>
int optval = 1 ;
setsockopt ( m_hServerSocket , SOL_SOCKET , SO_REUSEADDR , ( char * ) & optval , sizeof ( optval ) ) ;
// 4. <20> ˿<F3B6A8B6>
sockaddr_in service ;
service . sin_family = AF_INET ;
service . sin_addr . s_addr = INADDR_ANY ;
service . sin_port = htons ( 6000 ) ;
if ( : : bind ( m_hServerSocket , ( SOCKADDR * ) & service , sizeof ( service ) ) = = SOCKET_ERROR )
{
LogOutToFile ( " [TCP] Bind failed on port 6000: %d " , WSAGetLastError ( ) ) ;
closesocket ( m_hServerSocket ) ;
WSACleanup ( ) ;
return ;
}
// 5. <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD>
if ( listen ( m_hServerSocket , SOMAXCONN ) = = SOCKET_ERROR )
{
LogOutToFile ( " [TCP] Listen failed: %d " , WSAGetLastError ( ) ) ;
closesocket ( m_hServerSocket ) ;
WSACleanup ( ) ;
return ;
}
// 6. <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߳<EFBFBD>
m_pListenerThread = AfxBeginThread ( TCPListenerThread , this ) ;
if ( m_pListenerThread = = NULL ) {
LogOutToFile ( " [TCP] Thread creation failed! " ) ;
closesocket ( m_hServerSocket ) ;
WSACleanup ( ) ;
return ;
}
LogOutToFile ( " [TCP] Server successfully started on port 6000 " ) ;
}
BOOL CFastMainDialog : : OnInitDialog ( )
{
CDialogEx : : OnInitDialog ( ) ;
@@ -283,7 +155,7 @@ BOOL CFastMainDialog::OnInitDialog()
//<2F> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
InitLocalCamera ( ) ;
StartTCPServer ( ) ; // <20> <> <EFBFBD> <EFBFBD> TCP<43> <50> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
return TRUE ; // return TRUE unless you set the focus to a control
// <20> 쳣: OCX <20> <> <EFBFBD> <EFBFBD> ҳӦ<D2B3> <D3A6> <EFBFBD> <EFBFBD> FALSE
}