Я пытаюсь создать приложение на 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 »было сгенерировано».
указывает на строку "Десериализация".
Есть ли в моем коде что-то явно очевидное, вызывающее проблему?