あなたはサーバーですか?
あなたがサーバーの場合、ソケット接続をリッスンし、ソケット接続を受け入れて保存します。BeginReceive
次に、保存されたソケットで呼び出します。このBeginReceive
メソッドでは、データを受信して処理するためのコールバック関数を提供します。
データを受信すると、コールバックが発生します。コールバック関数はEndReceive
、保存された接続で呼び出します。これは、データを取得/処理する場所です。BeginReceive
また、さらにデータを待つために再度呼び出します。
このように、BeginReceive
andEndReceive
は循環して実行されます。常にデータを受信し、さらにデータを待っています。
例を次に示します。
void WaitForData(SocketState state)
{
try
{
state.Socket.BeginReceive(state.DataBuffer, 0, state.DataBuffer.Length, SocketFlags.None, new AsyncCallback(ReadDataCallback), state);
}
catch (SocketException se)
{
//Socket has been closed
//Close/dispose of socket
}
}
public void ReadDataCallback(IAsyncResult ar)
{
SocketState state = (SocketState)ar.AsyncState;
try
{
// Read data from the client socket.
int iRx = state.Socket.EndReceive(ar);
//Handle Data....
WaitForData(state);
}
catch (ObjectDisposedException)
{
//Socket has been closed
//Close/dispose of socket
}
catch (SocketException)
{
//Socket exception
//Close/dispose of socket
}
}
編集: あなたのコメントによると、ここに C# 非同期クライアントの例があります: http://msdn.microsoft.com/en-us/library/bbx2eya8.aspx。
BeginReceive
/はEndReceive
サーバーと同様に機能します。