服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?...

如果使用纯字节和字符串消息,则很难派生消息传递协议。您最好创建一个模型-类似

public class NetMessage{

public int MessageType{get;set;}

public dynamic Payload{get;set;}

}

因此,让成像MessageType 1是您的身份验证请求。

就像

{    "MessageType":"1",    "PayLoad":{

"Username":"Admin",

"Password":"Password123"

}

}

您可以将其序列化为字符串并发送(通过Newtonsoft.Json),或者,按照我的喜好,使用二进制格式化程序将对象直接转换为字节,然后通过网络发送字节。发送序列化为字节形式的数据,将比通过网络发送字符串信息的效率略高。

使用上述协议,可以使服务器对MessageType执行switch语句,然后以不同方式处理逻辑。

在您的问题中,您要发送已连接客户端的列表吗?

使用类似MessageType 99的名称,并将“有效负载”设置为“客户端列表”。请记住,您无法序列化TcpClient对象并将其发送给远程用户,并且期望该对象像已连接的TcpClient一样起作用。您最多可以发送远程IP和服务器连接到的端口。因此,我建议发送代表该数据的模型。

更新:

目前,您的后台工作人员正在接收数据并将其作为字节->文本进行处理,然后对文本执行直接的业务逻辑。

您应该使用的是托管类型,而不是字符串类型。字符串级别太低,您需要一些中间类型来帮助管理逻辑。

在Visual Studio中使用nuget软件包管理器安装Newtonsoft.Json(或JSON.Net,有时也称为)

使用Newtonsoft,您可以执行以下操作。

给定一个看起来像这样的课程

public class MessageClass

{

public int MessageType{get;set;}

public dynamic Payload{get;set;}

}

您可以执行以下操作

string content = "{\"MessageType\":\"2\",\"Payload\":\"blah\"}";

这是JSON格式的字符串,表示类实例。

在C#代码中,此对象将如下所示:

var message = new MessageClass();

message.MessageType=2;

message.Payload = "blah";

Newtonsoft给您的是将字符串转换为托管C#类型的能力。例如:

还记得我们上面称为“内容”的字符串吗?

var managedObject = JsonConvert.DeserializeObject(content);

Console.WriteLine(managedObject.MessageType);  // will; write 2

我的建议是,您的客户端和服务器通过JSON格式的对象进行通信,然后使您能够执行更高级的条件语句和更准确的断言。

Newtonsoft提供2种主要方法供您使用。记录在newtonsoft网站上。newtonsoft.com/json/help/html/Methods_T_Newtonsoft_Json_JsonConvert.htm

将C#对象转换为字符串JsonConvert.SerializeObject(object o); JsonConvert.DeserializeObject(String value);

对于反序列化方法,将您要反序列化的类型放在T所在的位置。

例如:

MessageClass msg = JsonConvert.DeserializeObject(content);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值