Я пишу клиент-серверное служебное приложение.Они общаются через TcpClient
/ Stream
(клиент) и TcpListener
/ Socket
(сервер).Я посылаю байты туда-сюда между этими двумя, затем я перехожу к той части, где у меня есть проблема;клиент отправляет сигнал на сервер (скажем, StartCounting
).Клиент начинает делать некоторые вещи (скажем, считает с нуля).Сервер делает то же самое, как только получает StartCounting
.Теперь, пока обе стороны считают, каждая сторона может прервать счет (скажем, нажав return).Когда одна сторона останавливается, она отправляет сообщение другой стороне для остановки.Вот несколько попыток кода (для клиента, но единственная разница в том, как они читают байтовый массив):
private void WaitForBye(object source, ElapsedEventArgs e)
{
byte[] responseBytes = new byte[1000];
int k = stream.Read(responseBytes, 0, 1000);
String response = ASCIIEncoding.ASCII.GetString(responseBytes);
response = response.Substring(0, k);
String from, to, message;
extractData(response, out message, out from, out to);
Console.WriteLine(++counter);
if (message == "BYE")
isBye = true;
}
bTimer = new Timer();
bTimer.Elapsed += new ElapsedEventHandler(WaitForBye);
bTimer.Interval = 1000;
bTimer.Enabled = true;
Console.WriteLine("Press return when finished.");
while (Console.ReadLine() != "" && !isBye) ;
Как бы я это сделал?Желательно без использования потоков и с Timer
вместо.