TCP通信プログラムを作ってみる ~その5~

クライアントとサーバーの通信でもうちょっと使いやすそうなものでデータのやり取りしたい。

具体的には、structとかclassとかでのやり取り。

[ C# ] クラスオブジェクトをネットワークで共有する ( Serializable ) – 行け!偏差値40プログラマー

参考にして前に作ったプログラムに追加したところ例外が発生。

System.Runtime.Serialization.SerializationException が発生しました
HResult=0x8013150C
Message=アセンブリ 'Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' が見つかりません

 グーグル先生に聞いてみたが、答えはすぐには見つかりそうもなかった。

 

そこで、参考にしたページを読み直してみた。

参考にしたページでは共通のクラスをDllにして参照していたが、

私は面倒だったので同じクラスを両方のソースに書いていた。

 

どうやらそれが行けなかった。

具体的に言うとクラス名やメンバ変数などが同じであっても、別物として認識されるようなのだ。

※ 今回は特にコピペでクラスを定義したのでメンバは一緒。

ServerでシリアライズしてClientでデシリアライズしてたのだがそれが別物と認識された。

そのため、Clientでデシリアライズした例外の中にServerの文字が入っていたという事。

 

参考にしたページと同じように受け渡しのクラスだけを定義したDllを作成し、Server、Clientの両方で参照し試してみた。

その結果、無事受け渡すことが出来た。