日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/1/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果使用純字節(jié)和字符串消息,則很難派生消息傳遞協(xié)議。您最好創(chuàng)建一個模型-類似

public class NetMessage{

public int MessageType{get;set;}

public dynamic Payload{get;set;}

}

因此,讓成像MessageType 1是您的身份驗證請求。

就像

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

"Username":"Admin",

"Password":"Password123"

}

}

您可以將其序列化為字符串并發(fā)送(通過Newtonsoft.Json),或者,按照我的喜好,使用二進制格式化程序?qū)ο笾苯愚D(zhuǎn)換為字節(jié),然后通過網(wǎng)絡(luò)發(fā)送字節(jié)。發(fā)送序列化為字節(jié)形式的數(shù)據(jù),將比通過網(wǎng)絡(luò)發(fā)送字符串信息的效率略高。

使用上述協(xié)議,可以使服務(wù)器對MessageType執(zhí)行switch語句,然后以不同方式處理邏輯。

在您的問題中,您要發(fā)送已連接客戶端的列表嗎?

使用類似MessageType 99的名稱,并將“有效負(fù)載”設(shè)置為“客戶端列表”。請記住,您無法序列化TcpClient對象并將其發(fā)送給遠程用戶,并且期望該對象像已連接的TcpClient一樣起作用。您最多可以發(fā)送遠程IP和服務(wù)器連接到的端口。因此,我建議發(fā)送代表該數(shù)據(jù)的模型。

更新:

目前,您的后臺工作人員正在接收數(shù)據(jù)并將其作為字節(jié)->文本進行處理,然后對文本執(zhí)行直接的業(yè)務(wù)邏輯。

您應(yīng)該使用的是托管類型,而不是字符串類型。字符串級別太低,您需要一些中間類型來幫助管理邏輯。

在Visual Studio中使用nuget軟件包管理器安裝Newtonsoft.Json(或JSON.Net,有時也稱為)

使用Newtonsoft,您可以執(zhí)行以下操作。

給定一個看起來像這樣的課程

public class MessageClass

{

public int MessageType{get;set;}

public dynamic Payload{get;set;}

}

您可以執(zhí)行以下操作

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

這是JSON格式的字符串,表示類實例。

在C#代碼中,此對象將如下所示:

var message = new MessageClass();

message.MessageType=2;

message.Payload = "blah";

Newtonsoft給您的是將字符串轉(zhuǎn)換為托管C#類型的能力。例如:

還記得我們上面稱為“內(nèi)容”的字符串嗎?

var managedObject = JsonConvert.DeserializeObject(content);

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

我的建議是,您的客戶端和服務(wù)器通過JSON格式的對象進行通信,然后使您能夠執(zhí)行更高級的條件語句和更準(zhǔn)確的斷言。

Newtonsoft提供2種主要方法供您使用。記錄在newtonsoft網(wǎng)站上。newtonsoft.com/json/help/html/Methods_T_Newtonsoft_Json_JsonConvert.htm

將C#對象轉(zhuǎn)換為字符串JsonConvert.SerializeObject(object o); JsonConvert.DeserializeObject(String value);

對于反序列化方法,將您要反序列化的類型放在T所在的位置。

例如:

MessageClass msg = JsonConvert.DeserializeObject(content);

總結(jié)

以上是生活随笔為你收集整理的服务器如何区分多个客户端的信息,如何从服务器向客户端发送已连接客户端的列表,以区分常规消息?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。