将多端口阵列发送到“;服务器”;(C#)

本文关键字:服务器 阵列 | 更新日期: 2023-09-27 18:24:17

假设我有一个客户端和一个服务器。我想向服务器发送两个阵列:

  1. 用户名(本例中为"a")
  2. 密码(本例中为"b")

我正在使用此代码发送到服务器:

stream.Write (userd, 0, userd.GetLength);
stream.Write (passd, 0, passd.GetLength);

服务器端是:

问题是,我在服务器端得到的输出是"ab"用户和密码,因为我无法区分密码字节和用户字节,因为它们都是在一个流中发送的(我说得对吗?)。

我该怎么做?:O

将多端口阵列发送到“;服务器”;(C#)

这个问题有点宽泛,但到此为止。不过,基本上,你有很多选择,你只需要选择一个就可以了。我的意思是,某些方法有优点也有缺点,但你可以比我猜到的更容易地解决这些问题。

如果你在做这样的事情,你会想担心安全问题,但这远远超出了你的问题范围,所以我认为你已经涵盖了。

这些只是我脑海中的几个选项。

使用分隔符

如果你这样做,你会在服务器和客户端上有一个你知道的字符,并且可以保证永远不会出现在用户名中(或者,如果需要的话,你可以进行转义)。例如,如果你选择了冒号,那么你会发送服务器:

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>

您能将对象序列化为二进制并在服务器上发送流吗?然后在服务器上将二进制流反序列化为对象。