C#TCP客户端侦听传入的消息
我有一个TCP客户端,它应该侦听来自其c&c的传入消息。消息结构应该是:缓冲区(字节数组)、类型(int/string)、id(int)和参数(string数组) 我发现此代码用于侦听传入消息:C#TCP客户端侦听传入的消息,c#,tcpclient,C#,Tcpclient,我有一个TCP客户端,它应该侦听来自其c&c的传入消息。消息结构应该是:缓冲区(字节数组)、类型(int/string)、id(int)和参数(string数组) 我发现此代码用于侦听传入消息: Byte[] bytes = new Byte[1024]; while (true) { // Get a stream object for reading using (NetworkStream streamFromServer = client.Ge
Byte[] bytes = new Byte[1024];
while (true)
{
// Get a stream object for reading
using (NetworkStream streamFromServer = client.GetStream())
{
int length;
// Read incomming stream into byte arrary.
while ((length = streamFromServer.Read(bytes, 0, bytes.Length)) != 0)
{
var incomingData = new byte[length];
Array.Copy(bytes, 0, incomingData, 0, length);
// Convert byte array to string message.
string serverMessage = Encoding.ASCII.GetString(incomingData);
}
}
}
如何使用缓冲区读取消息?另外,如何将
incommingData
转换为我的消息结构?从incommingData读取数据。您不需要服务器消息。您可以使用位转换器提取数据。如果字节数组是可变的,则需要包含其长度。如果您需要消息传递,而您只是在使用TCP,则由您来完成工作-TCP只提供一个字节流。它不保证一端对Write
的每次调用都会与另一端对Read
的调用1-1匹配。常用技术包括使用固定大小的消息或某种形式的分隔符,首先发送长度(但请注意,即使如此少量的数据也可能被分割)。或者移动到一个更高级别的TCP协议上,它为你做消息传递。如果这不仅仅是一个使用<代码> TCPcli客< /代码>的练习,那就只考虑使用WCF TCP端点,它已经很好地解决了所有这些问题。你不可能想出更好的现成的东西。