С#: вопрос по сокетам (таймаут сокета)
Добрый день!
Подскажите мне пожалуйста, по такому вопросу. Разрабатываю клиент для сокета.
Есть 2 сообщения для отправки : "0100", "0400".
Мы можем принять только два сообщения: "0110", "0410" соответственно. (0100->0110, 0400->0410)
Алгоритм таков:
1.отправляем 0100.
2.ждем ответа (тайм аут). если пришло сообщение 0110, то все ок, прекращаем работу.
3.если таймаут сработал, то отправляем сообщение 0400 и ждем ответа. если и тут срабатывает таймаут, то снова (и снова) отправляем 0400 до тех пор пока не придет 0410. только потом начинаем сначала с пункта 1 до тех пора пока не придет ответ 0110.
Есть код:
public string SendMessage(string message = "0100")
{
//получаемое сообщение
var bytesReceived = new Byte[40960]; //!!!!!!!! размер
var buffer = new List<Byte>();
socketClient.ReceiveTimeout = 5000;
//ответ сервера
string msg_input = "";
try
{
while (true)
{
// отправляем 0100
byte[] msg_output = Encoding.UTF8.GetBytes(Console.ReadLine());
socketClient.Send(msg_output);
//ждем в ответ 0110
int bytes = socketClient.Receive(bytesReceived, 0, bytesReceived.Length, SocketFlags.None);
buffer.AddRange(bytesReceived.Take(bytes));
//читаем ответ с сервера
msg_input = Encoding.ASCII.GetString(bytesReceived, 0, bytes);
break;
}
return msg_input;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
Помогите пожалуйста дополнить код согласно алгоритму (не разберу как опеределить работу с таймаутом).
Спасибо.
Источник: Stack Overflow на русском