将多个数组发送到n#34;服务器" (C#)

时间:2014-09-25 09:29:22

标签: c# tcpclient tcplistener

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

  1. 用户名(本例中为“a”)
  2. 密码(本例中为“b”)
  3. 我正在使用此代码发送到服务器:

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

    服务器端是:

    问题是我在服务器端获得的输出是“ab”用户和密码,因为我不能在密码字节和用户字节之间分开,因为它都是在一个流中发送的(我得到的)对吗?)。

    我该怎么做呢? :o

2 个答案:

答案 0 :(得分:2)

这个问题有点宽泛,但是这里有。但是,基本上,你有很多选择,你只需选择一个并运行它。我的意思是,某些方法有优点和缺点,但你可以更容易地解决这些问题,而不是猜测你为此做了什么。

如果你做这样的事情,你会担心安全问题,但这远远超出了你的问题范围,所以我只是假设你&#39已经覆盖了它。

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

使用分隔符

如果您使用此功能,您在服务器和客户端上只能拥有一个字符,并且可以保证永远不会出现在用户名中(或者如果需要,您可以进入转义状态)。例如,如果您选择了冒号,那么您将发送服务器:

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>

答案 1 :(得分:0)

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