如何通过UDP套接字连接发送类?

时间:2009-12-28 05:10:39

标签: c# class send

我有一个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所说的内容吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

  

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

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

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

-bn

答案 2 :(得分:0)

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

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

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