Я создал асинхронный сервер, который может читать сообщения от любого количества клиентов. Код моего сервера тесно связан с этим примером: http://msdn.microsoft.com/en-us/library/fx6588te.aspx
После подключения клиента я хотел бы периодически отправлять данные этому клиенту, может быть, 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);
}
BackgroundWorker
потока наTimer
. - person Security Hound   schedule 13.07.2012