假设我有一个客户端和一个服务器。我想向服务器发送两个数组:
我正在使用此代码发送到服务器:
stream.Write (userd, 0, userd.GetLength);
stream.Write (passd, 0, passd.GetLength);
服务器端是:
问题是我在服务器端获得的输出是“ab”用户和密码,因为我不能在密码字节和用户字节之间分开,因为它都是在一个流中发送的(我得到的)对吗?)。
我该怎么做呢? :o
答案 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)
您可以将对象序列化为二进制并在服务器上发送流吗? 然后在服务器上将二进制流反序列化为对象。