在Server和Client间传送struct,用到序列化和反序列化,但在Client端出现找不到文件或程序集名称"Server".

zhangqy 2003-11-28 10:35:14
在Server和Client间传送struct,用到序列化和反序列化,但在Client端出现找不到文件或程序集名称"Server".
Client:
//[Serializable]
public struct Astruct
{
public int seq;//结构的字段最好用public修饰
public char[] name;
public ulong len;
public char[] data;
}

Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint remote = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0],8070);
client.Connect(remote);//与服务端连接
NetworkStream stream = new NetworkStream(client);//取得服务端发送的数据
BinaryFormatter bf;
bf = new BinaryFormatter();
Astruct reci = (Astruct) bf.Deserialize(stream);//反序列化数据 运行到此时出现以上错误
谢谢!
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
turnmissile 2004-03-08
  • 打赏
  • 举报
回复
我又测试了一下,直接用struct就可以了,不用改为class。
至少我这里能正确执行。
turnmissile 2004-03-05
  • 打赏
  • 举报
回复
你确定在client和server端都有这个结构定义吗?
你为什么把//[Serializable]去掉了,不声明为可序列化的东西,怎么事先serialize呢?加上就好了,不过可能要改为class的。
三杯倒 2004-03-04
  • 打赏
  • 举报
回复
// 用 Marshal 傳回類別的 Unmanaged 大小 (以位元組為單位)
int size = Marshal.SizeOf(pAskConnect);
// 使用 GlobalAlloc 配置記憶體區塊
System.IntPtr ptr = Marshal.AllocHGlobal(size);
// 從 Managed 物件封送處理資料到 Unmanaged 記憶體區塊
Marshal.StructureToPtr(pAskConnect, ptr,true);
byte[] ba=new byte[size];
// 從 Managed 陣列將資料複製到 Unmanaged 記憶體指標
Marshal.Copy(ptr, ba, 0, ba.Length );
zhangqy 2003-11-28
  • 打赏
  • 举报
回复
using System;
using System.Net;
using System.IO;
using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text ;

namespace Server
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class dropmulticast
{
[Serializable]
public struct Astruct
{
public int seq;//结构的字段最好用public修饰
public char[] name;
public ulong len;
public char[] data;
public byte[] byt ;
}
public static void Main()
{

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//用tcp协议
IPEndPoint local = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0],8070);//监听8080端口
socket.Bind(local);
socket.Listen(3);//允许3个客户连接
while (true)
{
Socket accept = socket.Accept();//接受连接的客户
BinaryFormatter bf;
bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
Astruct ast = new Astruct();
ast.seq = 4;
ast.name = new char[]{'n', 'a', 'm', 'e'};
ast.len = 4;
ast.data = new char[]{'d', 'a', 't', 'a'};
bf.Serialize(stream, ast);
byte[] buff = stream.ToArray();
accept.Send(buff, buff.Length, 0);
accept.Close();
}
//Console.ReadLine() ;
}
}

以上是我的Server端代码
lemong 2003-11-28
  • 打赏
  • 举报
回复
看看读到的stream有没有问题,估计是你的NetworkStream 的用法有点问题

server端的代码呢?
rroo 2003-11-28
  • 打赏
  • 举报
回复
在Server和Client分别定义序列化的Struct,我建议将序列化的Struct改为序列化的Class,这样就肯定能在Server和Client间传输了

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧