Подскажите у меня exception(End of Stream encountered before parsing was completed) при десериализации объекта в клиент-серверном приложении на сервере. Клиент:
private void Send(Socket client)
{
byte[] buffer;
fileDetails = new FileDetails();
using (_memoryStream = new MemoryStream())
{
using (Stream fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, FileShare.None))
{
fs.Read(fileDetails.buffer, 0, fileDetails.buffer.Length);
// считывается имя с TextBoxa
string[] temp = textBox1.Text.Split('\\');
string[] temp2 = temp[temp.Length - 1].Split('.');
fileDetails.fileName = temp2[0];
fileDetails.fileType = temp2[1];
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(_memoryStream, fileDetails);
}
}
buffer = _memoryStream.ToArray();
client.BeginSend(buffer, 0, buffer.Length, 0,
new AsyncCallback(SendCallback), client);
}
private void SendCallback(IAsyncResult ar)
{
try
{
// Retrieve the socket from the state object.
Socket handler = (Socket)ar.AsyncState;
// Complete sending the data to the remote device.
handler.EndSend(ar);
sendDone.Set();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
Сервер:
private static void AcceptCallback(IAsyncResult ar)
{
// Signal the main thread to continue.
allDone.Set();
// Get the socket that handles the client request.
listener = (Socket) ar.AsyncState;
handler = listener.EndAccept(ar);
// Create the state object.
buffer = new byte[1024];
handler.BeginReceive(buffer, 0, buffer.Length, 0,
new AsyncCallback(ReadCallback), listener);
}
private static void ReadCallback(IAsyncResult ar)
{
// Signal the main thread to continue.
allDone.Set();
listener = (Socket) ar.AsyncState;
fileDet = new FileDetails();
int bytesRead = handler.EndReceive(ar);
if (bytesRead == 0)
{
return;
}
if (bytesRead > 0)
{
using (_memoryStream = new MemoryStream(buffer))
{
_memoryStream.Seek(0, 0); // не помогает
//_memoryStream.Flush тоже
BinaryFormatter fileFormatter = new BinaryFormatter();
fileDet = (FileDetails) fileFormatter.Deserialize(_memoryStream);
string fileName = fileDet.fileName + "." + fileDet.fileType;
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Read, FileShare.Read))
{
fs.Write(fileDet.buffer, 0, fileDet.buffer.Length);
}
}
}
else
{
// Not all data received. Get more.
handler.BeginReceive(buffer, 0, buffer.Length, 0,
new AsyncCallback(ReadCallback), listener);
}
}
Объект который хочу десериализовать(находиться в отдельной сборке):
[Serializable]
public class FileDetails
{
private string _fileName;
private string _fileType;
public string fileName
{
get { return _fileName; }
set { _fileName = value; }
}
public string fileType
{
get { return _fileType; }
set { _fileType = value; }
}
public byte[] buffer = new byte[1024];
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем приветСтолкнулся с такой вот проблемой: Необходимо продлить сессию пользователя до максимально возможной
Пытаюсь показать месторасположение в реальном времени на карте, получаю координаты и вызываю функцию для добавления маркера на карту :
ИСПОЛЬЗУЕТСЯ: WebDriver, С#, Google chrome СЦЕНАРИЙ - парсим DOM - проверяем содержит ли DOM, искомый домен