0

send() メソッドを使用して構造を送信しようとしている UDP サーバーがあります。これまでのところ運がありません...

これは私が使用しているものです:

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 の言うことを説明する突破口はありますか?

4

3 に答える 3

2

コード全体は見ていませんが、サーバーとクライアントは 2 つの異なる実行可能ファイルであり、ClientAnswerStructクラスは両側で2 回定義されていると思います。受信者がデータを逆シリアル化すると、オブジェクトを再構築しようとしClientAnswerStructますが、その定義を見つけることができません (送信者側で定義されていることに注意してください。受信者側には という名前のクラスがありますClientAnswerStructが、それらは同じではありません)。

これを行う正しい方法はClientAnswerStruct、スタンドアロン クラス ライブラリでクラスを定義し、サーバーとクライアント コードにそれを含めることです (C# 用語では「参照の追加」)。

于 2009-12-28T07:00:49.870 に答える
0

lamamac が既に述べたように、これはコードや使用する関数の問題ではないようです。UdpClientSampleというアプリケーションへの参照を追加しただけですが、アプリケーションを起動すると、必要なアプリケーションが見つかりません。

この問題を解決する最初の最も簡単な方法は、プロジェクト内の参照を選択して右クリックし、プロパティを選択してプロパティのCopy Localを true に設定することです。

アプリケーションが実行を開始した場合は、ロード順序について考えるか、AssemblyResolveを使用するか、ILMerge を使用するかを検討する必要があります。

于 2009-12-28T08:17:13.380 に答える
0

あなたの質問を少し明確にすることをお勧めします。. . C または C++ で次の関数を使用しようとしていると思いますか?

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

エラー メッセージ、動作しないサンプル コードなど、具体的な問題をお知らせください。

C++ について話している場合、構造体はすべてのメンバーがデフォルトでパブリックであることを除いてクラスです。技術的には (しかし重要なことに)、送信するのはクラスや構造体ではなく、オブジェクトまたはプリミティブ データ型のインスタンスです。

-億

于 2009-12-28T06:01:49.690 に答える