Я провел голосовой чат клиент-сервер (например, ventrilo) в C # и сейчас делаю это в неуправляемом win32 c ++. У меня есть вопрос о том, как асинхронные чтения / записи обрабатываются в C ++. В C # у вас была функция, которая вызывалась (EndSend / EndRecieve), как только BeginSend / BeginRecieve были сделаны. Как это делается в C ++? Я посмотрел на MSDN и гуглил и не мог найти ответ.
Вот пример кода, который запускается при нажатии кнопки, вызывая сообщение WM_WRITE, которое вызвало эту функцию:
[...]
case ID_BUTTON_SEND:
SendMessage(hWnd,SOCKET_TCP,0,FD_WRITE);
break;
[....]
case FD_WRITE:
onTextSend()
break;
[....]
void onSendText(HWND hWnd) {
// get window handle to send edit control
HWND hWndSend = GetDlgItem(hWnd,ID_EDIT_SEND);
// get textlength of send edit control
int textlen = GetWindowTextLength(hWndSend);
// allocate memory for a buffer that will contains the text to be sent and get the text
char* textbuff = (char*)malloc(textlen+1);
SendMessage(hWndSend,WM_GETTEXT,textlen+1,(LPARAM)textbuff);
// send content
send(tcp_sock,textbuff,textlen+1,0);
// cleanup allocated tempbuffer
free(textbuff);
}
Конечно, я не хочу инициировать асинхронную отправку, а затем приступить к освобождению буфера, используемого непосредственно при отправке, я хочу освободить его после завершения отправки (например, EndSend). Я не нашел способ сделать это на c ++, есть предложения?
РЕДАКТИРОВАТЬ: ТАКЖЕ! по какой-то причине, когда сервер принимает клиента, клиент не получает сообщение FM_CONNECT, не должно ли оно получить его, как только клиент подключен? Я могу отправить () и recv (), поэтому соединение определенно установлено.