以前做过一次Socket编程,在学校里要求做一个聊天功能
传输是拼接字符串,以流的形式进行传输,字符串格式为:命令|传给谁|消息内容
现在自己想做个小东西,但是传输内容不仅仅是这么简单了
假设有一个Student对象s,一个Teacher对象t,我如何封装成数据包进行传输呢?
或许大家会说要用到序列化和反序列化,恩恩,这个我也有想过
不过因为没做过这样的功能,
麻烦大家给我下思路,或者能给我篇文章让我看看
能贴出代码事例就更好了
谢谢各位了~
传输是拼接字符串,以流的形式进行传输,字符串格式为:命令|传给谁|消息内容
现在自己想做个小东西,但是传输内容不仅仅是这么简单了
假设有一个Student对象s,一个Teacher对象t,我如何封装成数据包进行传输呢?
或许大家会说要用到序列化和反序列化,恩恩,这个我也有想过
不过因为没做过这样的功能,
麻烦大家给我下思路,或者能给我篇文章让我看看
能贴出代码事例就更好了
谢谢各位了~
解决方案 »
- 求一C# ASP.NET用户权限缓存的方法(WEBFORM)+求一禁用PrintScreen键的方法(WEBFORM)
- vs2005连接ORACLE数据库问题,在线
- asp.net 2.0 如何让div根据内容自动显示水平垂直滚动条?
- DataGridView 中不能显示图片的问题
- 讨论:array与arraylist有什么不同?
- 用传值的方式传递引用类型和以引用方式的区别是什么?
- 怎样实现集合阿!(有详细内容)
- vs2010里生成父类方法的快捷键是多少?
- winform 把窗口上的全部信息生成PDF文件显示??
- 拖放的时候如何使用自己的关标?
- 局域网中已知IP以及端口如何获得对应的进程名?
- wcf 服务端返回object报错。
//本程序演示了最简单的序列化 和反序列化 ,将对象存储到本地文件中 ,
//对象序列化的另一个目的是网络传输信息
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
namespace 序列化_啊
{ class Program
{
static void Main(string[] args)
{
//创建文件a.dat
FileStream f = new FileStream("a.dat", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
//创建类的实例t
test t = new test();
//给属性赋值
t.A = "hello";
t.N = 5; //二进制序列化
IFormatter format = new BinaryFormatter();
format.Serialize(f, t);
f.Close(); //读取文件
f = new FileStream("a.dat", FileMode.Open, FileAccess.Read);
test m = (test)format.Deserialize(f);
Console.WriteLine(m.A);
Console.WriteLine(m.N);
f.Close();
Console.Read();
} [Serializable]//可序列化标记
class test
{
int n = 0;
string a = null;
[NonSerialized]//不可序列化标记
int b = 10;
public int N
{
set
{
n = value;
}
get
{
return n;
}
}
public string A
{
set
{
a = value;
}
get
{
return a;
}
}
}
}
}http://blog.csdn.net/xuanhun/archive/2008/07/25/2711455.aspx
假设有一个Student对象s,一个Teacher对象t
我如何把2个对象通过服务器发送到客户端,并进行分析,得到最初的s和t
public class Serialize
{
public static byte[] serialize(object obj)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
formatter.Serialize(ms, obj);
byte[] tmp = ms.ToArray();
ms.Close();
return tmp;
}
}
byte[] sends = Serialize.serialize(obj);
socket.send(sends);
http://topic.csdn.net/t/20020618/17/813223.html
这只是一个对象序列化之后转成了byte数组,如何将多个对象序列化后的byte数组合并进行传输?
这只是一个对象序列化之后转成了byte数组,如何将多个对象序列化后的byte数组合并进行传输?
//类对像的话用好像转化成object
object
public class MyClass
{
public string MyClassMember = "Hello World";
}
public void Send(Socket socket)
{
MyClass obj = new MyClass();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
byte[] data = new byte[1024];
while( ms.Read(data, 0, 1024)>0 )
{
sk.Send(data);
}
}
public void Recieve(Socket socket)
{
BinaryFormatter bf = new BinaryFormatter();
byte[] data = new byte[1024];
MemoryStream ms = new MemoryStream();
while( sk.Receive(data)>0 )
{
ms.Write(data, 0, 1024);
}
MyClass obj = bf.Deserialize(ms) as MyClass;
}
通过反射分析得出object是哪个对象。
楼下的是不是这样啊
通过反射分析得出object是哪个对象。
楼下的是不是这样啊