关于c# socket 传输信息的问题

服务器与客户端之间信息的格式定义如下

 [Serializable]
    public class Message<T>
    {
        private DataType.Head header;
        private T content;

        public DataType.Head Header
        {
            set
            {
                header = value;
            }
            get
            {
                return header;
            }
        }

        public T Content
        {
            set
            {
                content = value;
            }
            get
            {
                return content;
            }
        }

        public Message(DataType.Head head, T content)
        {
            this.Header = head;
            this.Content = content;
        }

关于聊天室的程序,我想传输 用户列表,聊天室列表,单纯的string消息 三种类型的数据,序列化 反序列化的方法如下

        public void SerializeData<T>(Socket socket, Protocol.Message<T> msg)
        {
            try
            {
                IFormatter formatter = new BinaryFormatter();
                NetworkStream strm = new NetworkStream(socket);
                formatter.Serialize(strm, msg);
            }
            catch (SerializationException e)
            {
                new Exceptions.SerializationException(e);
            }
            catch (Exception e)
            {
                new Exceptions.UnknowException(e);
            }
        }

        public Protocol.Message<T> DeserializeData<T>(Socket socket)
        {
            try
            {
                NetworkStream strm = new NetworkStream(socket);
                IFormatter formatter = new BinaryFormatter();
                Protocol.Message<T> msg = (Protocol.Message<T>)formatter.Deserialize(strm);
                return msg;
            }
            catch (SerializationException e)
            {
                new Exceptions.SerializationException(e);
            }
            catch (Exception e)
            {
                new Exceptions.UnknowException(e);
            }
            return null;
        }

反序列化的时候并不知道泛型的类型.....有什么更好的解决方案吗?我想把 数据类型 和 数据 分开传输,先拿到数据类型,再解析数据,这样可行吗?要怎样实现?

阅读 2.6k
1 个回答

多开几个端口可以解决......

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进