C#:读取TCP字节流后拆分字符串

时间:2016-03-16 09:35:07

标签: c# tcp

我正在使用C#将TCP / IP套接字数据读取为字符串(例如,在PLC编程代码中输入的LREAL值,如' 2.2214E-18'),然后将其插入到MongoDB中。但是,我不想在插入字符串时指定数据库的名称,而是希望将其与字符串一起提供。然后,我想分割字符串并在程序的各个部分使用这些部分。

我有什么方法可以做到这一点?

我的目标是提供' 2.2214E-18 database_name collection_name'作为PLC侧的字符串,并将其拆分为C#代码。

为了读取字节流,使用了这个特定的代码块:

TcpClient client = new TcpClient(hostName, portNum);
StreamReader sr = new StreamReader(client.GetStream());
line = sr.ReadToEnd();

期待您的回复。

2 个答案:

答案 0 :(得分:0)

这样做:

string[] plcInfo = line.Split();

string[] plcInfo = line.Split(null);

或:

string[] plcInfo = line.Split(new char[0]);

你将在一个数组中获得2个字符串,第一个元素必须是 2.2214E-18 ,第二个元素必须是 database_name集合名称

答案 1 :(得分:0)

您的实际问题似乎是:

  

在我控制其格式的字符串中,如何存储以后可以拆分的多个值?

答案非常简单:你需要一个分隔符。选择分隔符是困难的部分,它必须是一个永远不会出现在你想要存储的值中的分隔符。

在这种情况下,管道符(|)似乎是一个安全的赌注。所以让你的字符串是这样的:

string input = "2.2214E-18|database_name|collection_name";

然后您可以拆分该角色并检索单独的值:

string[] output = input.Split('|');

然后确保在使用之前验证输出:

if (output.Length != 3)
{
    throw new ArgumentException("input", "Useful error message here");
}

string value = output[0];
string databaseName = output[1];
string collectionName = ouput[2];