c# socket通信怎么判断客户端掉线
请给C#代码学习,先谢大家了关于c#中socket通讯的问题(心跳等)1.这种方法的可行性?我需要通过TCP的方式实时向服务器请求端去数据,设想有一个心跳线程,定时向服务...
请给C#代码学习,先谢大家了
关于c#中socket通讯的问题(心跳等)
1.这种方法的可行性?
我需要通过TCP的方式实时向服务器请求端去数据,设想有一个心跳线程,定时向服务器端发送然后服务器端回复,如果连续几次没有回复的话,进行重新连接?请问这种方式有没有必要??
2.有没有参考的代码?? 展开
关于c#中socket通讯的问题(心跳等)
1.这种方法的可行性?
我需要通过TCP的方式实时向服务器请求端去数据,设想有一个心跳线程,定时向服务器端发送然后服务器端回复,如果连续几次没有回复的话,进行重新连接?请问这种方式有没有必要??
2.有没有参考的代码?? 展开
3个回答
展开全部
p2p软件的话 个人认为就像楼主说的一样 需要客户端定期向服务器发送信息. 但服务器如果不强大的话 如果在服务器端做监控得到信息就回馈 在线用户很多的时候很容易就把服务器堆死了 如果是局域网可以选择用文件监控的方式 例如使用fileWatcher让系统去托管 当用户状态改变时会触发事件 或者用线程定期获取局域网列表 获取局域网机器列表的代码大致如下:
DataTable table = instance.GetDataSources();
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
switch (col.ColumnName)
{
case "ServerName": listView1.Items.Add("1", row[col].ToString(), 0); break;
case "InstanceName": listView1.Items.Find("1", true)[0].ToolTipText += "实例名:" + row[col].ToString(); break;
case "Version": listView1.Items.Find("1", true)[0].ToolTipText += "SQL版本:" + row[col].ToString(); break;
}
}
}
如果是广域网的话 就需要由客户端定期发从数据到服务器了 如果长时间未发送就判断该客户端已掉线 代码与正常socket交互没有很大区别 但要考虑到网络延迟问题设按实际情况设置间隔时间
DataTable table = instance.GetDataSources();
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
switch (col.ColumnName)
{
case "ServerName": listView1.Items.Add("1", row[col].ToString(), 0); break;
case "InstanceName": listView1.Items.Find("1", true)[0].ToolTipText += "实例名:" + row[col].ToString(); break;
case "Version": listView1.Items.Find("1", true)[0].ToolTipText += "SQL版本:" + row[col].ToString(); break;
}
}
}
如果是广域网的话 就需要由客户端定期发从数据到服务器了 如果长时间未发送就判断该客户端已掉线 代码与正常socket交互没有很大区别 但要考虑到网络延迟问题设按实际情况设置间隔时间
展开全部
这种方式有必要,就是现在最常用的’心跳包‘技术。。
这种心跳技术还可以进一步做,还可以让通讯多方设置同步等的功能。
代码其实很简单,和普通socket方式一样,只是作用只是检测而已。
这种心跳技术还可以进一步做,还可以让通讯多方设置同步等的功能。
代码其实很简单,和普通socket方式一样,只是作用只是检测而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般都是一个单独的线程去定时尝试发送数据到到服务器, 几次不成功就重新连.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询