2010-11-20

[C++/CLI] UDPプログラミング ~非同期通信編~

クライアント側で受信する際に、非同期で処理をしたほうがスムーズに動作する場合があります。以下は、クライアント側のソースです。
using namespace System::Net;
using namespace System::Net::Sockets;
usc = gcnew UdpStateClass();
Socket ^listener = gcnew Socket(AddressFamily::InterNetwork, SocketType::Dgram, ProtocolType::Udp);
usc->endPnt = gcnew IPEndPoint(IPAddress::Any, 11000);//
usc->udpClt = gcnew UdpClient(11000); //接続相手
usc->udpClt->BeginReceive(gcnew AsyncCallback(this,&Clientwww::Form1::receiveCallback),usc);
//コールバック関数の定義
void receiveCallback(IAsyncResult ^ar){
ImageConverter ^imgconv = gcnew ImageConverter();
UdpClient ^uc = (safe_cast<UdpStateClass^>(ar->AsyncState))->udpClt;
IPEndPoint ^iep = (safe_cast<UdpStateClass^>(ar->AsyncState))->endPnt;
//受信データを配列に格納
receiveData = uc->EndReceive(ar, iep);
//コールバック再読み込み
usc->udpClt->BeginReceive(gcnew AsyncCallback(this,&Clientwww::Form1::receiveCallback),usc);
}
view raw udpClient.cpp hosted with ❤ by GitHub
BeginReceiveが実行されると、非同期で受信を行いコールバック関数が呼び出されます。この方法を利用することで、受信を行うまでに次の処理にすすめることができます。

0 件のコメント:

コメントを投稿