NetworkComms V3 使用TCP通信传递IList<T>类型的数据

客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取)

我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持)

[ 使用protobuf.net序列化器]

第一步创建相关的工程文件:

技术分享

MessageContract中的 User类为契约类,使用protobuf.net进行序列化

写法如下:

 

using System;
using System.Collections.Generic;
using System.Text;
using ProtoBuf;

namespace MessageContract
{
    [ProtoContract]
    public class User
    {
        private string userID = string.Empty;
        private string name = string.Empty; 
        
        public User()
        { }

        [ProtoMember(1)]
        public string UserID
        {
            get { return userID; }
            set { userID = value; }
        }
        [ProtoMember(2)]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}

服务器端程序:

1、开始监听

 //服务器开始监听客户端的请求
            //开始监听某端口
            Connection.StartListening(ConnectionType.TCP, new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text)));
            button1.Text = "监听中";

2、注册相应的处理器

NetworkComms.AppendGlobalIncomingPacketHandler<string>("ReqUsers", IncomingReqUsersHandle);

3、处理方法

  private void IncomingReqUsersHandle(PacketHeader header, Connection connection, string  msg)
        {
            try
            {
                //模拟一些数据  返回给客户端
                IList<User> users = new List<User>();

                User user1=new User ();
                user1.Name="名山大川";
                user1.UserID="1000";

                User user2=new User ();
                user2.Name="日月江河";
                user2.UserID="2000";

                users.Add(user1);
                users.Add(user2);


                connection.SendObject("ResUsers", users);
            }
            catch (Exception ex)
            {
                LogTools.LogException(ex, "IncomingMsgHandle");
            }
        }

客户端代码:

1、连接服务器

  connInfo = new ConnectionInfo(txtIP.Text, int.Parse(txtPort.Text));

            //如果不成功,会弹出异常信息
            newTcpConnection = TCPConnection.GetConnection(connInfo);

2、点击下图中的按钮,获取数据

技术分享

 private void button3_Click(object sender, EventArgs e)
        {
            IList<User> resMsg = newTcpConnection.SendReceiveObject<string, IList<User>>("ReqUsers", "ResUsers", 5000, "Test");

            listBox2.DataSource = resMsg;
            listBox2.DisplayMember = "name";
            listBox2.ValueMember = "name";
           
        }

效果图如下:

技术分享

 

www.networkcomms.cn编辑

 相关的文章:

客户端通过TCP通信分页从服务器获取数据

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。