XML文档中有一个错误(170,46)
本文关键字:错误 文档 有一个 XML | 更新日期: 2023-09-27 18:14:04
我想通过套接字连接发送一个对象列表。我知道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 =(列表)formatter.Deserialize(流);
我假设所有的数据都没有被接收,所以这正在发生。
问题是您直到最后才收到整个XML -因此您只序列化XML的初始部分。你必须从套接字中读取,直到没有数据为止。
我建议设置一个由客户端发送的结束符字符串,以便您查找它以知道您已完全收到消息。
请记住,套接字不是基于请求-响应的。打开套接字并继续阅读