【问题标题】:How do I send a class throught UDP socket connection?如何通过 UDP 套接字连接发送课程?
【发布时间】:2010-12-30 09:32:19
【问题描述】:

我有一个 UDP 服务器,我正在尝试使用 send() 方法发送结构.. 到目前为止没有运气...

这是我正在使用的:

H,G 是结构...

发送方:

IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, H);
Byte[] buffer = stream.ToArray();
stream.Close();

在接收方:

IFormatter formatter = new BinaryFormatter();
Stream s = new MemoryStream(buffer.Data);
ClientAnswerStruct G = (ClientAnswerStruct)formatter.Deserialize(s);
s.Close();
MessageBox.Show(G.name);

但我收到此错误:

 Unable to find assembly 'UdpClientSample, Version=1.0.0.0, Culture=neutral,    PublicKeyToken=null'.

'UdpClientSample'恰好是向服务器发送数据的客户端程序的标题......所以我想知道是否需要序列化才能通过 UDP 连接发送结构?

那里有什么突破可以解释 Iamamac 所说的话吗?

【问题讨论】:

  • 发送类是什么意思?你想序列化它并通过远程发送它吗?
  • @Y_Y:在您了解类和实例之间的区别之前,您可能要考虑不要这样做。
  • 您可以尝试将其序列化为字符串格式,如果需要加密并发送。

标签: c# class send


【解决方案1】:

我建议稍微澄清一下您的问题。 . .我假设您正在尝试在 C 或 C++ 中使用以下函数?

ssize_t send(int socket, const void *buffer, size_t length, int flags );

让我们知道您遇到的具体问题,例如:错误消息、不工作的示例代码等。

如果您在谈论 C++,那么结构就是一个类,除了结构中的所有成员默认情况下都是公共的。从技术上讲(但重要的是),您发送的不是类或结构,而是对象或原始数据类型的实例。

-b

【讨论】:

  • 我收到此错误:无法找到程序集 'UdpClientSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。
【解决方案2】:

我没有看到完整的代码,但我猜服务器和客户端是两个不同的可执行文件,ClientAnswerStruct 类在两边都定义了两次。当接收方反序列化数据时,它试图重构一个ClientAnswerStruct对象但找不到它的定义(注意它是在发送方定义的。虽然在接收方有一个名为ClientAnswerStruct的类,但它们是不一样)。

正确的做法是在独立类库中定义ClientAnswerStruct 类,并让服务器和客户端代码包含它(C# 术语中的“添加引用”)。

【讨论】:

  • 如果我将结构序列化后,将其保存到文件中,然后将文件发送给客户端怎么办?客户端是否能够读取和反序列化?
  • @Y_Y 只需序列化并发送字节数组即可。这里的关键是确保客户端能够找到结构的定义。你需要做的就是把定义放到一个独立的dll项目中,让服务端和客户端项目引用它。
【解决方案3】:

正如 lamamac 已经说过的,这似乎不是您使用的代码或函数的问题。只是您添加了一个名为 UdpClientSample 的应用程序引用,但是当您启动应用程序时,它找不到所需的应用程序。

解决这个问题的第一个最简单的方法是在你的项目中选择引用,右键单击它,选择属性并将属性Copy Local设置为true。

如果应用程序现在开始运行,您应该考虑一下 load orderusing AssemblyResolveusing ILMerge

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多