将多端口阵列发送到“;服务器”;(C#)
本文关键字:服务器 阵列 | 更新日期: 2023-09-27 18:24:17
假设我有一个客户端和一个服务器。我想向服务器发送两个阵列:
- 用户名(本例中为"a")
- 密码(本例中为"b")
我正在使用此代码发送到服务器:
stream.Write (userd, 0, userd.GetLength);
stream.Write (passd, 0, passd.GetLength);
服务器端是:
问题是,我在服务器端得到的输出是"ab"用户和密码,因为我无法区分密码字节和用户字节,因为它们都是在一个流中发送的(我说得对吗?)。
我该怎么做?:O
这个问题有点宽泛,但到此为止。不过,基本上,你有很多选择,你只需要选择一个就可以了。我的意思是,某些方法有优点也有缺点,但你可以比我猜到的更容易地解决这些问题。
如果你在做这样的事情,你会想担心安全问题,但这远远超出了你的问题范围,所以我认为你已经涵盖了。
这些只是我脑海中的几个选项。
使用分隔符
如果你这样做,你会在服务器和客户端上有一个你知道的字符,并且可以保证永远不会出现在用户名中(或者,如果需要的话,你可以进行转义)。例如,如果你选择了冒号,那么你会发送服务器:
username:password
服务器可以使用string.Split(':')
或等效方法来计算参数。
使用固定宽度
同样,设置一个契约,但在这里,用户名无论如何都会占用一定数量的字符,而且永远不会超过。
username password
然后您可以获取string.Substring(...)
来查找参数。
HTTP
这是一个更复杂的问题,但HTTP请求的Authorization
标头使用了冒号分隔符,就像我最初提到的那样。如果您将HTTP标准化为用于所有请求,那么它可能看起来像这样,带有一些伪代码。
GET /path HTTP/1.1
Authorization: BASIC [base64(username:password)]
JSON/XML
JSON和XML是用于发送和存储数据的格式。
JSON看起来像这样:
{ "username" : "thisIsTheUsername", "password" : "password01" }
XML看起来像这样:
<creds>
<username>thisIsTheUsername</username>
<password>password01</password>
</creds>
您能将对象序列化为二进制并在服务器上发送流吗?然后在服务器上将二进制流反序列化为对象。