Я разрабатываю одно приложение TCP-сервера с классом прослушивателя TCP. здесь мое серверное приложение получает данные каждую секунду от клиента.Преобразование типа данных прослушивателя TCP
Клиент, отправляющий данные в предопределенном формате. полученные данные содержат 15 сообщений, разделенных символом «\ 0». например, «12 \\ 012.12 \ 0» и т. д. после получения данных i разделить данные и преобразовать их в строковый массив. поэтому у меня есть строковый массив из 15 элементов. после этого каждый элемент преобразуется в конкретный тип данных, и вся запись поступает в базу данных.
сюда данные отправка/получение бывает на каждую секунду. проблема, с которой я сталкиваюсь, - это мое приложение, не отправляющее данные каждую секунду в клиентское приложение.
Когда я удаляю код преобразования типа данных, все работает нормально, как и ожидалось. но с кодом конверсии потребовалось больше миллисекунд, и мое приложение не смогло отправить данные обратно клиенту вовремя.
ниже - мой код. если я удалю код преобразования типа данных из функции «MapVariables», он хорошо работает.
Пожалуйста, пожалуйста, может кто-нибудь помочь мне в этом?
private async void ProcessClient(TcpClient tcpClient, CancellationToken ct)
{
try
{
while (!ct.IsCancellationRequested)
{
var stream = tcpClient.GetStream();
var buffer = new byte[bufferSize];
var amountRead = await stream.ReadAsync(buffer, 0, bufferSize);
var message = Encoding.ASCII.GetString(buffer, 0, amountRead);
string[] dataFromClient = Code.Common.SplitByLength(message, messageSize).ToArray();
dataFromClient = dataFromClient.Select(x => ParseMessage(x)).ToArray();
common.MapVariables(dataFromClient);
string serverResponse = string.Join(", ", dataFromClient);
//Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
Byte[] sendBytes = Encoding.ASCII.GetBytes(message);
await stream.WriteAsync(sendBytes, 0, sendBytes.Length, ct);
stream.Flush();
}
}
catch (System.IO.IOException ex)
{
//loge exception
}
catch (Exception ex)
{
//loge exception
}
}
public void MapVariables(string[] variables)
{
Variables.Variable1 = int.Parse(variables[0]);
Variables.Variable2 = int.Parse(variables[1]);
Variables.Variable3 = int.Parse(variables[2]);
Variables.Variable4 = int.Parse(variables[3]);
Variables.Variable5 = int.Parse(variables[4]);
Variables.Variable6 = int.Parse(variables[5]);
Variables.Variable7 = int.Parse(variables[6]);
Variables.Variable8 = decimal.Parse(variables[7]);
Variables.Variable9 = decimal.Parse(variables[8]);
Variables.Variable10 = decimal.Parse(variables[9]);
Variables.Variable11 = decimal.Parse(variables[10]);
Variables.Variable12 = int.Parse(variables[11]);
Variables.Variable13 = int.Parse(variables[12]);
Variables.Variable14 = decimal.Parse(variables[13]);
Variables.Variable15 = decimal.Parse(variables[14]);
InsertintoDatabase();
}
Вы получаете исключения? Вы уверены, что ваша проблема не в 'InsertintoDatabase'? –
Что значит «не закончить вовремя», в чем именно проблема, которую вы испытываете? –
Нет. Я не получаю исключения, но мое приложение не отвечает на запрос клиента в течение секунды. каждый запрос/ответ должен быть завершен за одну секунду. когда я удаляю код преобразования типа данных и просто вставляю значения по умолчанию в базу данных, он работает очень хорошо, но когда я включаю код преобразования типа данных, его иногда получают 2 секунды, и мое сообщение нарушается. я не знаю, но если есть другой лучший способ сделать это, пожалуйста, поделитесь со мной. –