TCP侦听器数据类型转换



我正在开发一个带有TCP侦听器类的TCP服务器应用程序。这里我的服务器应用程序每秒从客户机获取数据。

客户端以预定义格式发送数据。接收到的数据包含15条以""分隔的消息。例如"121234512.12"等等。获得数据后,我拆分数据并将其转换为字符串数组。我有一个包含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();
    }

看看代码,除了逗号分隔外,您只需发送他们发送给您的内容。

您可以将MapVariables(...)调用移动到一个单独的线程中并使用它。我猜你的InsertintoDatabase调用才是真正的瓶颈。

你也可以尝试在你回复之后移动MapVariables(...),因为它看起来不会影响任何事情。

最新更新