我的建議是先創建一個Message
類,這將是「兌換」從和到byte[]
類型。然後,您可以創建一個NetStream
,該NetStream
源自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
方法:
Message message = new Message("hello world", 1, 3, 3, 7);
meSocket.Send((byte[])message);
如果這還不夠,只是讓我知道,我會更新這個答案與更多的細節。
從接收數據讀取四個字節到一個數組中。使用BitConvert將數組轉換爲int或uint。 BitConverter.ToUInt32(陣列,0);您需要驗證長度是否大於2^31(無符號整數) – jdweng