Socket发送问题(问题发错区了悬赏是100分进来点链接)

来源:百度知道 编辑:UC知道 时间:2024/06/12 16:03:42
问题链接那里回到我给分
http://zhidao.baidu.com/question/47800469.html

小弟刚接触C#时间不久,正在做一个局域网内的C/S模式的小系统,
不是web应用的系统所以只能考虑用socket进行通讯
在Socket通信上遇到些问题
例如客户端登录服务器进行身份验证时,本地发送验证信息给服务器,而Socket的Send方法只能发送byte[]类型的数据。那我如果要想将这验证信息以key和value的形式发送应该用什么来对数据进行打包转成Send()方法允许的类型发送呢?或者还是有更好更简便的方式进行通讯

前辈们给点意见谢谢(如果有这类型的代码那更好哈)

把类型名字放在最前面并存入流中(用BinaryWriter的write方法写到流里)再将此类型变量按序存入流中,并取出字节流发送。这样服务器只需将字节数组存到内存流里,并用BinaryReader的ReadString方法把名字读出来,用名字反射一个对象(System.Reflection.Assembly【非本地代码,需程序集dll】,或 Activator.CreateComInstanceFrom()),并依照前面的顺序在读出其所有数据,赋值给这个对象,就ok了,这就是发送对象的方法。

的确没有,
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
你试试这个类,这个只能将系统定义的一些对象序列化。

你需要发送的参数是个2维的字符串数组。应该也可以。

string[] ddd = { "asdf", "ajlksdjf" };
System.IO.MemoryStream m = new System.IO.MemoryStream();
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter ff = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
ff.Serialize(m, ddd);
m.Seek(0L, System.IO.SeekOrigin.Begin);

string[] nn = (string[])(ff.Deserialize(m));

字节数组m.GetBuffer();
转为内存流System.IO.MemoryStream m = new System.IO.MemoryStream(byte[] aa);