2010-12-31 10 views
0

私はC#でクライアントサーバボイスチャット(ventriloのような)を行っています。アンマネージドwin32 C++でこれをやっています。非同期読み取り/書き込みがC++でどのように処理されるかについての質問があります。 C#では、BeginSend/BeginRecieveが完了すると、呼び出された関数(EndSend/EndRecieve)がありました。これはC++でどのように行われますか?私はmsdnを見て、グーグルと答えを見つけることができませんでした。私は非同期送信を開始してから解放する続行しないもちろんWin32非同期ソケットの基本的な質問

[...] 
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); 
} 

:ここ

は、この関数を呼び出したWM_WRITEメッセージをトリガ、ボタンが押されたときに実行される例のコードです送信に直接使用されるバッファー、送信が完了したら(EndSendのように)、割り当てを解除したい私はそれを行うためのC + +の方法、任意の提案を発見したhavn't?

編集:ALSO!何らかの理由で、サーバがクライアントを受け入れると、クライアントはFM_CONNECTメッセージを受け取っていません。クライアントが接続されるとすぐにそれを取得してはいけませんか?私はsend()とrecv()を行うことができますので、接続が確実にアップします。

答えて

2

、あなたはASIOに対処したくない場合は、ここでは非同期ソケットについての良いチュートリアルがあります:http://www.gamedev.net/reference/programming/features/asyncsock/

+0

送信に対処する方法はない、私はのwinsockを使って好み、このチュートリアルでは、明確ないくつかのことをアップしました、しかし。基本的に今はテキストを送るだけです。このチュートリアルでは、WM_WRITEはその目的にはあまり適していないと言います。そのバッファの割り当てを解除するにはどうすればいいですか?また、更新された主な質問! – KaiserJohaan