c# - 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;
}
但是我有理由确定,问题发生在服务器端。
解决方案
推荐阅读
- wordpress - 同时编辑多个wordpress帖子正文
- memory - 限制内存访问
- javascript - 单击按钮后调用时,Axios 会断开用户操作的下一步操作
- php - 大型应用的ActiveRecord设计问题
- system-verilog - 系统verilog程序模块如何避免时序问题?
- .net - 如何在章鱼部署中设置软件包版本号并自动发布该版本
- linux - Centos7,文件访问报错“没有这样的文件或目录”,但可以复制和统计
- load-testing - 在 K6 中分解 API 级别或流级别的统计信息?
- azure - Azure IoT Hub 客户端 - 如何以应用程序/json 格式上传文件
- python - 使用 Python beautifulsoup 选择除特定标签之外的所有内容