私は、サーバーとクライアントの2つの部分を持つC#アプリケーションを作成しようとしています。クライアントはネットワークを介してサーバーと通信する必要があります(テストする場合、両方の部分がローカルコンピュータ上で "127.0.0.1"で通信する)。私はソケットとシリアライゼーションを組み合わせようとしましたが、運がありませんでした。ネットワーク経由でオブジェクトを送信する
私はシリアル化し、このような単純な(テスト)オブジェクトを送信しようとしている:
[Serializable]
class Test
{
public string msg="default";
}
このクラスはサーバーとクライアントコードの両方で定義されています。
送信するコードは次のようになります。
try
{
Test tst = new Test();
tst.msg = "TEST";
NetworkStream ns = new NetworkStream(m_socWorker);
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, tst);
m_socWorker.Send(ms.ToArray());
}
catch(System.Net.Sockets.SocketException se)
{
MessageBox.Show (se.Message);
}
受信コードは次のようになります。
public void OnDataReceived(IAsyncResult asyn)
{
try
{
CSocketPacket theSockId = (CSocketPacket)asyn.AsyncState ;
//end receive...
Test tst;
byte[] buffer = new byte[1024];
m_socWorker.Receive(buffer);
BinaryFormatter bin = new BinaryFormatter();
MemoryStream mem = new MemoryStream(buffer);
tst = (Test)bin.Deserialize(mem);
txtDataRx.Text = tst.msg;
theSockId.thisSocket.EndReceive(asyn);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0,"1","\nOnDataReceived: Socket has been closed\n");
}
catch(SocketException se)
{
MessageBox.Show (se.Message);
}
}
私はデータを送信するとき、私は例外受け取る - タイプの
」例外」をSystem.OutOfMemoryException 'がスローされました。
"デシリアライズ"行を指しています。
問題を引き起こしているコード内にはっきりと明白なことはありますか?
なぜWCFを使用していませんか? –
[基本的なWindows Communication Foundationの概念](http://msdn.microsoft.com/en-us/library/ms731079.aspx) – crashmstr
まあ...私はWFCに精通していません。私はそれを使用しませんでした – guest86