Я хочу отправить список объектов через сокетное соединение.И я знаю, что сервис WCF будет лучшим вариантом, но для меня это не вариант.
Я использую этот код для отправки данных
private void tm_Tick(object sender, EventArgs e)
{
XmlSerializer formatter = new XmlSerializer(typeof(List<Objects.PIP>));
MemoryStream stream = new MemoryStream(1024);
formatter.Serialize(stream, Repository.GlobalRepository.PIPInformation);
byte[] bt = stream.ToArray();
foreach (Communication.Client Client in server.ClientList)
{
Client.SendMessage(bt);
}
stream.Flush();
}
public void SendMessage(Byte[] bytesSent)
{
SocketAsyncEventArgs writeEventArgs = new SocketAsyncEventArgs();
writeEventArgs.SetBuffer(bytesSent, 0, bytesSent.Length);
socket.SendAsync(writeEventArgs);
}
Кажется, что работает нормально.
для получения данных я использую этот код в потоке.
void ReceiveData()
{
try
{
while (true)
{
if (disposed == true)
return;
data = new byte[socket.ReceiveBufferSize];
var recv = socket.Receive(data);
XmlSerializer formatter = new XmlSerializer(typeof(List<Object.PIP>));
MemoryStream stream = new MemoryStream(data);
**Classes.TickerInformation.PIPList= (List<Object.PIP>)formatter.Deserialize(stream);**
}
socket.Close();
return;
}
catch (Exception ex)
{
}
}
Я получаю исключение Ошибка в XML-документе (170, 46).в этой строке: Classes.TickerInformation.PIPList = (List) formatter.Deserialize (stream);
Я предполагаю, что все данные не принимаются, поэтому это происходит.