Socket发送问题

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

前辈们给点意见谢谢(如果有这类型的代码那更好哈)
那我现在有2个参数UserId,UserPwd需要打包传送,能写个范例给我吗?主要用到的几个类让我看看参考下,MSDN的帮助没找到我想要的东西!拜托了~~
3楼的做法勉强能称作发送对象吧,如果对象复杂些参数多一些那多累呀要一个个赋值·····
没有方法能将一个对象直接以流的形式,自动将它转成合适的类型发送,提取的时候直接提取出个对象么?这封装数据的活儿全得我们自己干么???··

把类型名字放在最前面并存入流中(用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);

不管你是想发什么都要先转成字节数组