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の両方で参照し試してみた。
その結果、無事受け渡すことが出来た。