服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?...
如果使用純字節和字符串消息,則很難派生消息傳遞協議。您最好創建一個模型-類似
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);
總結
以上是生活随笔為你收集整理的服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软服务器收费吗,了解 Azure 外部
- 下一篇: c++服务器开源项目,开源一个c++ l