⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 message.cs

📁 .net2003 C# 基于pda的winsock通讯
💻 CS
字号:
using System;

namespace SocketLibrary
{
	public class Message
	{
		public enum CommandHeader:byte {
			SendMessage = 1	 
		}
		public Connection SendToOrReceivedFrom;
		public int MessageLength;
		public CommandHeader Command; 
		public byte MainVersion;
		public byte SecondVersion;

		public string MessageBody;

		public bool Sent;

		public Message()
		{
			SendToOrReceivedFrom = null;
			Sent = false;
		}
		public Message(CommandHeader command,byte mainVersion,byte secondVersion,string messageBody):this() {
			this.Command = command;
			this.MainVersion = mainVersion;
			this.SecondVersion = secondVersion;
			this.MessageBody = messageBody;
		}
		public byte[] ToBytes() {
			this.MessageLength = 7 + SocketFactory.DefaultEncoding.GetByteCount(this.MessageBody);//计算消息总长度。消息头长度为7加上消息体的长度。
			byte[] buffer = new byte[this.MessageLength];
			//先将长度的4个字节写入到数组中。
			BitConverter.GetBytes(this.MessageLength).CopyTo(buffer,0);
			//将CommandHeader写入到数组中
			buffer[4] = (byte)this.Command;
			//将主版本号写入到数组中
			buffer[5] = (byte)this.MainVersion;
			//将次版本号写入到数组中
			buffer[6] = (byte)this.SecondVersion;

			//消息头已写完,现在写消息体。
			byte[] body = new byte[this.MessageLength - 7];
			SocketFactory.DefaultEncoding.GetBytes(this.MessageBody).CopyTo(buffer,7);
			return buffer;	 
		}
		public static Message Parse(Connection connection) {
			Message message = new Message();
			//先读出前四个字节,即Message长度
			byte[] buffer = new byte[4];
			if(connection.NetworkStream.DataAvailable) {
				int count = connection.NetworkStream.Read(buffer,0,4);
				if(count == 4) {
					message.MessageLength = BitConverter.ToInt32(buffer,0);	 
				}
				else
					throw new Exception("网络流长度不正确");
			}
			else
				throw new Exception("目前网络不可读");
			//读出消息的其它字节
			buffer = new byte[message.MessageLength - 4];
			if(connection.NetworkStream.DataAvailable) {
				int count = connection.NetworkStream.Read(buffer,0,buffer.Length);
				if(count == message.MessageLength -4) {
					message.Command = (CommandHeader)buffer[0];
					message.MainVersion = buffer[1];
					message.SecondVersion = buffer[2];

					//读出消息体
					message.MessageBody = SocketFactory.DefaultEncoding.GetString(buffer,3,buffer.Length - 3);
					message.SendToOrReceivedFrom = connection;

					return message;
				}
				else
					throw new Exception("网络流长度不正确");
			}
			else
				throw new Exception("目前网络不可读");
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -