任意の数のクライアントからのメッセージを読み取ることができる非同期サーバーを作成しました。私のサーバーコードはこの例と密接に関連しています:http://msdn.microsoft.com/en-us/library/fx6588te.aspx
クライアントが接続した後、定期的にそのクライアントにデータを送信したいと思います。おそらく1秒間に2〜3回です。非同期のsend()でこれを実現する良い方法を考えることはできません。AcceptCallback()
クライアントへの接続が行われる場所であるため、何らかのタイミングメカニズムをメソッドに追加する必要があると思います。
以前のバージョンのサーバーでは、ブロッキングソケットを使用し、send()
メソッドを無限while()
ループでループsleep()
して、タイミングを下げるために呼び出しました。
これが私が考えていることです:
public void AcceptCallback(IAsyncResult ar)
{
allDone.Set(); // Signal the main thread to continue.
// Get the socket that handles the client request.
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
IPEndPoint remotePoint = (IPEndPoint)handler.RemoteEndPoint;
IPAddress remoteAddress = remotePoint.Address;
Console.WriteLine("Connected to {0}!", remoteAddress.ToString());
// Create the state object.
StateObject state = new StateObject();
state.workSocket = handler;
//Start periodically sending here??
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}