我有一个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所说的内容吗?
答案 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 order或using AssemblyResolve或using ILMerge