日期:2014-05-18  浏览次数:20822 次

TCP数据传输的疑惑,请达人指点
服务端DataSet的一个表里的数据通过TCP每秒一次的发送到客户端来更新一个ListView,这种应用一般采用什么方法来发送数据呢?比如winbox就是几千条的链接信息每秒更新一次,它的数据是怎么通过服务器发送到客户端来维护ListView的?

我暂时是服务端遍历这个表里的每条数据,一条条发送,这样可以做到添加新行和修改变更的行,但无法删除ListView里相对应的服务器数据库已删除的行,而且是发送的明码,感觉很不好


请知道的指点一下,这种应用最好的实现方法是什么,不胜感激!

------解决方案--------------------
DataSet可以序列化成XML
您是要DataSet中的一个DataTable的资料?
还是整个DataSet?
应该说您的DataSet有几个DataTable?
您可以参考这一篇,将整个DataSet序列化送到客户端,然后Bind DataSet
http://www.codeproject.com/KB/list/ListView_DataBinding.aspx
C# code
db = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);

db.Open();
string SQLStatement = "EXEC [BasicSearch] @totalResults = '100',@miles =N'100'";

SqlDataAdapter SQLDataAdapter = new SqlDataAdapter(SQLStatement, db);
DataTable dtResult = new DataTable();
SQLDataAdapter.Fill(dtResult);
SQLDataAdapter.Dispose();
ListView1.DataSource = dtResult;
db.Close();

------解决方案--------------------
DataSet Serilize成Byte[]通过Socket 发送
remoting
通过XML实现数据传输

------解决方案--------------------
把整个datatable序列化后发送
private void sendData(string str)
{
SqlDataAdapter da = new SqlDataAdapter(str,conn);
DataSet ds = new DataSet();
da.Fill(ds,"mytable");
BinaryFormatter formatter = new BinaryFormatter();
NetworkStream stream = new NetworkStream(currentSocket);
formatter.Serialize(stream,ds);
stream.Flush();
stream.Close();
}