📄 wcydlg.cpp
字号:
if( nRet == SOCKET_ERROR )
{
//return 0;
}
int ii=0;
int iiGet, iiRecd;
dataLength = fileinfo.fileSize;
recdData = new byte[RECV_BUFFER_SIZE];
cbLeftToReceive = dataLength;
//////////////////////////////////////////////////////////////////////////////////////
while ((doneFlag != 1)&&(cbLeftToReceive > 0 ))
//while (doneFlag != 1)
{
Sleep(150);
//if ((bufferSize = fread(speechBuffer, sizeof(char), 4096, fp)) <= 0)
// break; // no more data
iiGet = ( cbLeftToReceive < RECV_BUFFER_SIZE ) ? cbLeftToReceive : RECV_BUFFER_SIZE ;
iiRecd = recv( m_socket, ( char *)recdData, iiGet, 0);
returnCode = itrec_recognize(m_index, recdData, iiRecd,
&doneFlag, &speechBegin, &speechEnd);
//returnCode = itrec_recognize(index, speechBuffer, bufferSize,
// &doneFlag, &speechBegin, &speechEnd);
if (returnCode != VT_EXIT_SUCCESS)
{
ASRresultstr+="fail...............\t";
//break;
//fail++;
}
//::MessageBox(hwnd," ok","警告",MB_OK);
ii++;
cbLeftToReceive -= iiRecd;
};
if(doneFlag==1)
success++;
else
fail++;
//ASRresultstr+="recognize finished\t";
if (returnCode != VT_EXIT_SUCCESS) {
itrec_detach_recognizer(m_index);
//::MessageBox(hwnd," fail","警告",MB_OK);
//continue;
}
// Step 6: Stop the recognizer
returnCode = itrec_stop_recognizer(m_index);
if (returnCode != VT_EXIT_SUCCESS) {
//MessageBox("itrec_stop_recognizer() failed");
itrec_detach_recognizer(m_index);
//continue;
}
// Step 7: Wait until the recognition result is ready
do {
returnCode = itrec_query_status(m_index, &recogStat, &speechBegin, &speechEnd);
if (returnCode != VT_EXIT_SUCCESS)
{}
//break;
if (recogStat == VT_RESULT_NOT_READY_YET) Sleep(500);
} while (recogStat == VT_RESULT_NOT_READY_YET);
if (returnCode != VT_EXIT_SUCCESS) {
//MessageBox(" itrec_query_status() failed");
itrec_detach_recognizer(m_index);
//continue;
}
// Step 8: Retrieve recognition results
returnCode = itrec_query_result(m_index, 3, &doneFlag, &recogStat, &numResult, NULL);
// sprintf(tem,"%d",numResult);
if (numResult > 0) {
results = (VT_RESULT*)calloc(numResult, sizeof(VT_RESULT));
returnCode = itrec_query_result(m_index, 3, &doneFlag, &recogStat, &numResult, results);
}
if (returnCode != VT_EXIT_SUCCESS)
{
//MessageBox(" itrec_query_result() failed");
itrec_detach_recognizer(m_index);
//continue;
}
returnCode = itrec_deactivate_grammar(m_index, &lp_grammar);
if (returnCode != VT_EXIT_SUCCESS)
{
//MessageBox(" Failed to deactivate grammar");
itrec_detach_recognizer(m_index);
//continue;
}
// Step 9: Detach from the recognizer
returnCode = itrec_detach_recognizer(m_index);
if (returnCode != VT_EXIT_SUCCESS)
{
//MessageBox(" Failed to detach from recognizer server");
//continue;
}
// Display recognition results
//ASRresultstr+="Result: ";
switch (recogStat)
{
case VT_RESULT_AVAILABLE: ASRresultstr+="Results Obtained\r\n"; break;
case VT_RESULT_NONE: ASRresultstr+="No Result\r\n"; break;
case VT_RESULT_SPEECH_TOO_SOFT: ASRresultstr+="No Speech\r\n"; break;
case VT_RESULT_SPEECH_TOO_SOON: ASRresultstr+="Speech Too Soon\r\n"; break;
case VT_RESULT_SPEECH_TOO_NOISY: ASRresultstr+="Too Noisy\n"; break;
case VT_RESULT_SPEECH_TOO_LONG: ASRresultstr+="Speech Too Long\r\n"; break;
case VT_RESULT_NOT_READY_YET: ASRresultstr+="Result Not Ready\r\n"; break;
case VT_RESULT_ERROR: default: ASRresultstr+="Error!!!\r\n"; break;
}
if (numResult == 0) {
ASRresultstr+="******** No answer found ******\r\n";
}
else
{
for (i = 0; i < numResult; i++)
{
switch (i) {
case 0:
sprintf(tempname,"1st-best result: %s(score: %5.3f)\r\n", results[i].result, results[i].score);
break;
case 1:
sprintf(tempname,"2nd-best result: %s(score: %5.3f)\r\n", results[i].result, results[i].score);
break;
case 2:
sprintf(tempname,"3nd-best result: %s(score: %5.3f)\r\n", results[i].result, results[i].score);
break;
default:
sprintf(tempname,"%dth-best result: %s(score: %5.3f)\r\n", i+1, results[i].result, results[i].score);
break;
}
ASRresultstr+=tempname;
}
}
ASRresultstr+="\n";
sprintf(tempname,"Speech Begin: %5.3f Speech End: %5.3f Duration: %5.3f\r\n",
speechBegin, speechEnd, speechEnd - speechBegin);
ASRresultstr+=tempname;
if (results != NULL) {
free(results);
results = NULL;
}
//////////////////////////////////////////////////////////////////////////
CString strSend;
strSend=ASRresultstr;
sendto(m_socket,strSend,strSend.GetLength()+1,0,
NULL,sizeof(SOCKADDR));
///////////////////////////////////////////////////////////////////////
//(SOCKADDR*)&addrTo//可选指针
//}
fclose(ufp);
ASRresultstr+="************************************************\r\n";
//::PostMessage(hwnd,WM_RESLUTDATE,0,NULL);//给当前的对话框送数据。用消息实现。传对象不行
ASRresultstr_server+=ASRresultstr;
::SetDlgItemText(hwnd,IDC_EDIT_RECV,ASRresultstr_server);
ReleaseMutex(hMutex);
switch(m_index)
{
case 0:
m_num->first+=success;
break;
case 1:
m_num->second+=success;
break;
case 2:
m_num->third+=success;
break;
}
m_List++;
ipstruct *m_ipstrcut=new ipstruct;
m_ipstrcut->ipstr=m_ip;
m_ipstrcut->port=m_port;
m_ipstrcut->m_struct=m_num;
m_ipstrcut->Lisence_index=m_index;
m_ipstrcut->m_list=m_List;
::SendMessage(hwnd,WM_RESLUTDATE,0,(LPARAM)m_ipstrcut);
//m_hip=inet_addr(m_ip);
int m_hip=22;
int m;
while(TRUE)
{
recv( m_socket, (char *)&m, sizeof(m) , 0 );
if(m==m_hip)
break;
}
//::MessageBox(hwnd,"ok","警告",MB_OK);
CANCLE_type * ty=new CANCLE_type;
ty->str_ip=m_ip;
ty->str_port=m_port;
ty->S=&m_socket;
::SendMessage(hwnd,WM_CANCLE,0,(LPARAM)ty);
//shutdown(m_socket, 0);
//closesocket(m_socket);
return 1;
/////////////////////////////////////////////////////////////////////////////////
}
void CWCYDlg::OnBtnASR()
{
}
BOOL CWCYDlg::InitSocket()
{
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );
if( m_socket == INVALID_SOCKET )
{
MessageBox("创建失败");
return 0;
}
int nResult = 0;
SOCKADDR_IN addrSock;
memset(&addrSock,0,sizeof(addrSock));
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(8439);
//addrSock.sin_addr.S_un.S_addr=inet_addr( "INADDR_ANY" );
//自动获取本地ip
/////////////////////////////////////////////////////////////
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
//CString ip;
char *ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
if((hostinfo = gethostbyname(name)) != NULL)
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
WSACleanup( );
}
//////////////////////////////////////////////////////////
addrSock.sin_addr.S_un.S_addr=inet_addr( ip);
nResult = bind( m_socket ,( sockaddr* )&addrSock, sizeof( SOCKADDR_IN ) );
nResult = listen( m_socket , 5 );
return 0;
}
DWORD WINAPI CWCYDlg::Hhread_Num(LPVOID lpParameter)
{
// TODO: Add your control notification handler code here
HWND hwnd=((thread_type*)lpParameter)->hwnd;//将参数传递到本地变量
SOCKET m_socket_entry=((thread_type*)lpParameter)->S;
SOCKET s_c;
///////////////////////////////////////////////////////////////////////////////////////
SOCKADDR_IN Tempaddr;
int len = sizeof ( Tempaddr );
int m_flag=0;
//int m_n=0;
//int success_1=0;
//int nResult;
//num_struct * m_num=new num_struct;
m_num->first=0;
m_num->second=0;
m_num->third=0;
//m_List=0;
////////////////////////////////////////////////////// //
m_client=0;
while(1)
{
do{
s_c = accept( m_socket_entry, ( sockaddr *)&Tempaddr, &len );
}while(s_c == INVALID_SOCKET);
m_client++;
char * str_addr;
int str_port;
//DWORD addr=Tempaddr.sin_addr;
str_addr=inet_ntoa(Tempaddr.sin_addr); //inet_ntoa converts ipv4 to string
//inet_addr converts string to (Ipv4) Internet
str_port=Tempaddr.sin_port;
//::SetDlgItemText(hwnd,IDC_EDIT_LICENSE,str_addr);
m_flag = rand();
m_flag=m_flag%NUM_INSTANCE;
//
THreadConn_type * Conn= new THreadConn_type;
Conn->index=m_client;
Conn->str_ip=str_addr;
Conn->str_port=str_port;
::SendMessage(hwnd,WM_CONN,0,(LPARAM)Conn);
sockrecv* sr=new sockrecv;
sr->hwnd=hwnd;
sr->S=s_c;
sr->index=m_flag;
sr->str_ip=str_addr;
sr->str_port=str_port;
///////////////////////////////////////////////////////
HANDLE hThread;
hThread=CreateThread(NULL,0,entry,(LPVOID)sr,0,NULL);
CloseHandle(hThread);
//closesocket(s_c);
}
}
void CWCYDlg::OnResult(WPARAM wParam, LPARAM lParam)
{
//对Lisence的操作。
int T_index=0;
T_index=((ipstruct *)lParam)->Lisence_index;
int m_n;
CString strTemp;
//char *Temp_ip=((ipstruct *)lParam)->ipstr;
//int Temp_port=((ipstruct *)lParam)->port;
int m_L=((ipstruct *)lParam)->m_list;
switch(T_index)
{
case 0:
m_n=((ipstruct *)lParam)->m_struct->first;
strTemp.Format("%d",m_n);
m_ListCtl.SetItemText(0,1,strTemp);
break;
case 1:
m_n=((ipstruct *)lParam)->m_struct->second;
strTemp.Format("%d",m_n);
m_ListCtl.SetItemText(1,1,strTemp);
break;
case 2:
m_n=((ipstruct *)lParam)->m_struct->third;
strTemp.Format("%d",m_n);
m_ListCtl.SetItemText(2,1,strTemp);
break;
default :
break;
}
}
DWORD WINAPI CWCYDlg::THread_Connect(LPVOID lpParameter)
{
return 0;
}
void CWCYDlg::OnConn(WPARAM wParam, LPARAM lParam)
{
//显示连接上的客户端
int m_L=((THreadConn_type*)lParam)->index;
m_L=m_L-1;
char *Temp_ip=((THreadConn_type*)lParam)->str_ip;
int Temp_port=((THreadConn_type*)lParam)->str_port;
CString strTemp;
LVITEM item;
item.mask=LVIF_TEXT|LVIF_IMAGE;
item.iSubItem=0;
item.iItem=m_L;
item.pszText=" ";
m_ListP_i.InsertItem(&item);
m_ListP_i.SetItemText(m_L,0,Temp_ip);
strTemp.Format("%d",Temp_port);
m_ListP_i.SetItemText(m_L,1,strTemp);
return ;
}
void CWCYDlg::OnCancle(WPARAM wParam, LPARAM lParam)
{
char * str_i=((CANCLE_type *)lParam)->str_ip;
int port=((CANCLE_type *)lParam)->str_port;
SOCKET *s = ((CANCLE_type *)lParam)->S;
int num=m_client;
CString strIP;
CString strport;
char * c_ip=NULL;
int result;
int m_port=0;
for(int i=0;i<num;i++)
{
strIP=m_ListP_i.GetItemText(i,0);
c_ip=strIP.GetBuffer(strIP.GetLength());
strport=m_ListP_i.GetItemText(i,1);
m_port=atoi(strport);
result=strcmp(strIP,c_ip);
if((result==0)&&(m_port==port))
{
m_ListP_i.DeleteItem(i);
break;
}
}
m_client--;
shutdown(*s, 0);
closesocket(*s);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -