首页 > 解决方案 > System.Text.GetBytes 缩短了我的数据,修复了吗?

问题描述

所以我有这个功能:

byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

我通过网络将生成的字节数组发送到客户端。问题是输入字符串数据相当长,这会将其转换为大小仅为 33 的数组,我已经知道这还不够,当然在客户端,当我转换回字符串时,它就像 1/10细绳。知道这是由什么引起的吗?

如果相关,输入字符串为:

MSH|^~\&|NEMEC APP|FBMI MENTAL HEALTH INSTITUTE|CLIENT APP|CLIENT FACILITY|20180529201338||ORU^R01^ORU_R01|20110614000009|P|2.4|||NE|AL|Czechia|ASCII||ASCII
PID|||2011021||Name||Date|O|||Address|
PV1||I|^^OR-1^10.2.56.5:1
ORC|RE
OBR|1|||VITAL|||20110616122516||||||||||||||||||A
OBX|1|NM|_001000^VITAL HR|1|92|bpm|||||F|||20110616122516|||
OBX|2|NM|_002000^VITAL VPC|1|0|/min|||||F|||20110616122516|||
OBX|3|NM|_003000^VITAL ST1|1|0.00|mV|||||F|||20110616122516|||
OBX|4|NM|_003001^VITAL ST2|1|0.02|mV|||||F|||20110616122516|||
OBX|5|NM|_003002^VITAL ST3|1|0.02|mV|||||F|||20110616122516|||
OBX|6|NM|_003003^VITAL STVR|1|-0.01|mV|||||F|||20110616122516|||
OBX|7|NM|_003004^VITAL STVL|1|0.00|mV|||||F|||20110616122516|||
OBX|8|NM|_003005^VITAL STVF|1|0.02|mV|||||F|||20110616122516|||
OBX|9|NM|_004001^VITAL APSEC(RESP)|1|1|sec|||||F|||20110616122516|||
OBX|10|NM|_004073^VITAL rRESP(co2)|1|16|/min|||||F|||20110616122516|||
OBX|11|NM|_007000^VITAL SpO2|1|99|%|||||F|||20110616122516|||
OBX|12|NM|_007001^VITAL PR(spo2)|1|90|/min|||||F|||20110616122516|||
OBX|13|NM|_028000^VITAL TEMP2|1|24.1|C|||||F|||20110616122516|||
OBX|14|NM|_044000^VITAL ART(S)|1|87|mmHg|||||F|||20110616122516|||
OBX|15|NM|_044001^VITAL ART(D)|1|50|mmHg|||||F|||20110616122516|||
OBX|16|NM|_044002^VITAL ART(M)|1|65|mmHg|||||F|||20110616122516|||
OBX|17|NM|_044006^VITAL PR(art)|1|90|/min|||||F|||20110616122516|||
OBX|18|NM|_052000^VITAL PAP(S)|1|30|mmHg|||||F|||20110616122516|||
OBX|19|NM|_052001^VITAL PAP(D)|1|6|mmHg|||||F|||20110616122516|||
OBX|20|NM|_052002^VITAL PAP(M)|1|16|mmHg|||||F|||20110616122516|||
OBX|21|NM|_053000^VITAL CVP(S)|1|17|mmHg|||||F|||20110616122516|||
OBX|22|NM|_053001^VITAL CVP(D)|1|7|mmHg|||||F|||20110616122516|||
OBX|23|NM|_053002^VITAL CVP(M)|1|8|mmHg|||||F|||20110616122516|||
OBX|24|NM|_058000^VITAL ICP(S)|1|300|mmHg|||||F|||20110616122516|||
OBX|25|NM|_058001^VITAL ICP(D)|1|300|mmHg|||||F|||20110616122516|||
OBX|26|NM|_058002^VITAL ICP(M)|1|300|mmHg|||||F|||20110616122516|||
OBX|27|NM|_058003^VITAL CPP|1|-235|mmHg|||||F|||20110616122516|||
OBX|28|NM|_072044^VITAL rPR(art)|1|90|/min|||||F|||20110616122516|||
OBX|29|NM|_073000^VITAL RESP(co2)|1|16|/min|||||F|||20110616122516|||
OBX|30|NM|_073001^VITAL EtCO2|1|48.0|mmHg|||||F|||20110616122516|||
OBX|31|NM|_073003^VITAL APSEC(CO2)|1|1|sec|||||F|||20110616122516|||
;n

从客户端的字节数组转换回来后,只剩下:

MSH|^~\&|NEMEC APP|FBMI MENTAL HEALTH INSTITUTE|CLIENT APP|CLIENT FACILITY|20180529201338||ORU^R01^ORU_R01|20110614000009|P|2.4|||NE|AL|Czechia|ASCII||ASCII
PID|||2011021||Name||Date|O|||Address|
PV1||I|^^OR-1^10.2.56.5:1
ORC|RE
OBR|1|||VITAL|||20110616122

所以对于实际的代码:

字符串数据等于上面,到此为止没有问题。服务器端如下:

byte[] msg=System.Text.Encoding.ASCII.GetBytes(data);
stream.Write(msg, 0, msg.Length);

而在客户端是 sendReceive 函数,它负责发送请求并获取响应。

static string sendRec(string message)
{
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
    NetworkStream stream = client.GetStream();
    stream.Write(data, 0, data.Length);
    data = new Byte[256];

    String responseData = String.Empty;
    Int32 bytes         = stream.Read(data, 0, data.Length);
    responseData        = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine("Received: {0}", responseData);

    return responseData;
}

但是我有理由确定,问题发生在服务器端。

标签: c#arraysclient-serverbyte

解决方案


推荐阅读