Это сводит меня с ума прямо сейчас, я в настоящее время пишу некоторые программы клиент/сервер, я могу послать массивы между клиентами без проблем, но проблема заключается в этом коде здесь:Serialize класса
MemoryStream fs = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
lock (fs)
lock (sharedVars.clients[i])
formatter.Serialize(fs, sharedVars.clients[i]);
sender.SendData(setFirstByte(Game_Project_no._14wI542Z.Shared.Constants.InitialByte.REQUEST_RTN, fs.ToArray()));
Я запускаю код и с точками останова. Я вижу, что memystream содержит данные в нем из сериализации, однако он никогда не попадает на другой компьютер (это фактически происходит через локальный хост, чтобы избежать фактических ошибок сетевого оборудования).
Это используется TCP, и настоящая сумасшедшая часть заключается в том, что если я вручную напишу новый массив байтов в память, то данные попадут на другую сторону без проблем, по сути, это просто не похоже на сериализованные данные. Это меня действительно запутывает, поэтому я задаю вопрос обществу, какие-то идеи?
Для дополнительной ссылки это то, что дозвонились, когда совершенно пустой массив (преградить request_rtn байт в начале) попадает в другой конец:
Shared.SharedValues.Client clientTemp;
readBuffer = removeFirstByte(readBuffer);
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream(readBuffer);
ms.Position = 0;
lock (serverValues)
clientTemp = (Shared.SharedValues.Client)formatter.Deserialize(ms);
serverValues.clients[clientTemp.ID] = clientTemp;
И снова на стороне сервера код я изменил проверить это, который работает во всех отношениях:
MemoryStream fs = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
byte[] byteArray = new byte[10000];
for (i = 0; i < 10000; i++)
{
byteArray[i] = (byte)i;
}
lock (fs)
lock (sharedVars.clients[i])
//formatter.Serialize(fs, sharedVars.clients[i]);
fs.Write(byteArray, 0, 10000);
sender.SendData(setFirstByte(Game_Project_no._14wI542Z.Shared.Constants.InitialByte.REQUEST_RTN, fs.ToArray()));
Вы проверили содержимое fs.toArray()? –
В обоих случаях они содержат именно то, что я ожидаю. –
Как клиент, так и сервер используют одно и то же определение класса для 'Shared.SharedValues.Client'? – rsbarro