使用二进制和ascii数据发送套接字

时间:2017-04-07 13:22:21

标签: c# sockets

我正在尝试与公司整合,他们使用我不熟悉的套接字

我可以连接没问题,但我在根据他们想要的方式发送数据时遇到问题

他们想要的是他们所谓的标题记录,它以消息长度开头 和其他4个整数字段,他们想要二进制

然后他们想要消息数据,但希望在ascii编码

我无法弄清楚如何做到这一点我不确定我是否应该在第一部分使用二进制编写器并尝试添加ascii

因为这是一个字节[]我不认为它可以在事后

改变

任何人都可以给我一些他们认为在这件事上对我有用的建议或样本

1 个答案:

答案 0 :(得分:0)

我的建议是首先创建一个Message类,它将“可转换”来自byte[]类型。然后,您可以创建一个源自NetStream的{​​{1}},并使用它来通过指定的Stream发送数据。这是一个易于维护的解决方案,根本不需要任何关于插座通信的额外知识 代码示例:

Socket

拥有此对象后,您只需使用// include these namespaces : using System; using System.Collections.Generic; public class Message { int m_MessageLength; // your other fields char m_OtherField1; char m_OtherField2; char m_OtherField3; char m_OtherField4; // message content as I assume is string string m_MessageContent; public Message(string message, int field1, int field2, int field3, int field4) { m_MessageConten = message; m_OtherField1 = field1; m_OtherField2 = field2; m_OtherField3 = field3; m_OtherField4 = field4; } public static explicit operator byte[](this Message message) { List<byte> buffer = new List<byte>(); // 4 fields each 2bytes wide gives us 16 bytes // ASCII character is 7 bits wide but is packed into 8 bits which is 1byte // gives us the result of ( length_of_message * 1byte == length_of_message ) buffer.AddRange(BitConverter.GetBytes(8 + m_MessageContent.Length)); buffer.AddRange(BitConverter.GetBytes(m_OtherField1)); buffer.AddRange(BitConverter.GetBytes(m_OtherField2)); buffer.AddRange(BitConverter.GetBytes(m_OtherField3)); buffer.AddRange(BitConverter.GetBytes(m_OtherField4)); buffer.AddRange(Encoding.ASCII.GetBytes(m_MessageContent)); return buffer.ToArray(); } } 方法:

Socket.Send

如果这还不够,请告诉我,我会更详细地更新这个答案。