社区
C#
帖子详情
如何判断remoting的客户端已经连接上服务端
五位数
2010-10-21 04:21:18
是这样。我的远程对象是在服务端上实例化的。
然后客户端获得这个远程对象的代理。
现在客户端需要在服务端上注册自己。
可是如果服务端并没有起来。客户端是不能在服务器上注册自己的。也就是连接不到服务器
所以我需要知道客户端是否实时的能够连接到服务器。
希望懂的朋友给点提示
...全文
614
13
打赏
收藏
如何判断remoting的客户端已经连接上服务端
是这样。我的远程对象是在服务端上实例化的。 然后客户端获得这个远程对象的代理。 现在客户端需要在服务端上注册自己。 可是如果服务端并没有起来。客户端是不能在服务器上注册自己的。也就是连接不到服务器 所以我需要知道客户端是否实时的能够连接到服务器。 希望懂的朋友给点提示
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
五位数
2010-10-26
打赏
举报
回复
能否在remoting上给出解决办法
烈火蜓蜻
2010-10-25
打赏
举报
回复
直接使用就是了,如果抛异常那就是没连接上,这不就简单了
码农星球撸码J
2010-10-25
打赏
举报
回复
记不大清了,
1:无论服务器是否在线,客户端的代理对象好像都是可以创建的。
2:保险的做法是,远程端提供一个void IsOnline()函数,每隔1分钟(或你需要的时间段)调用一次,如果,没抛错,就在线。
3:C#是无法完全意义上实现检测实时在线的,比如远程机器网线断开或死机,就不会立刻通知到本机,必须使用2中的心跳办法。
至于心跳,给你个例子:
模拟通信中的客户端。客户端在运行过程中,服务器每隔一段的时间会给客户端发送心跳数据。客户端启动一个线程,每3秒检测是否收到心跳数据,如果没有心跳数据,则告诉自己已经和服务器断开连接。代码如下:
Thread t;
AutoResetEvent _autoResetEvent = new AutoResetEvent(false);
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(delegate
{
while (true)
{
//等3秒,3秒没有信号,显示断开
//有信号,则显示更新
bool re = _autoResetEvent.WaitOne(3000);
ShowRe(re);
}
}));
t.Start();
t.IsBackground = true;
}
void ShowRe(bool re)
{
label1.BeginInvoke(new MethodInvoker(delegate
{
if (re)
{
label1.Text = DateTime.Now.ToString() + "保持连接状态";
}
else
{
label1.Text = DateTime.Now.ToString() + "断开,需要重启";
}
}));
}
//模拟服务器发送心跳数据。
private void button2_Click(object sender, EventArgs e)
{
_autoResetEvent.Set();
}
五位数
2010-10-25
打赏
举报
回复
继续等待明白人来
五位数
2010-10-25
打赏
举报
回复
还是无人关注啊。。。。。
guyehanxinlei
2010-10-25
打赏
举报
回复
使用WCF吧
gongsun
2010-10-25
打赏
举报
回复
没有办法保证能够实时检查服务器是否可用
-------------------------------------
写个服务,用个线程 每隔30秒 调用一次。
五位数
2010-10-25
打赏
举报
回复
WCF没用过哦。刚开始弄remoting。了解的话。给点建议呗
zjx198934
2010-10-25
打赏
举报
回复
有wcf都包装好了! 何必用removting呢!
五位数
2010-10-25
打赏
举报
回复
要沉。顶起来
五位数
2010-10-25
打赏
举报
回复
[Quote=引用 4 楼 luminji 的回复:]
记不大清了,
1:无论服务器是否在线,客户端的代理对象好像都是可以创建的。
2:保险的做法是,远程端提供一个void IsOnline()函数,每隔1分钟(或你需要的时间段)调用一次,如果,没抛错,就在线。
3:C#是无法完全意义上实现检测实时在线的,比如远程机器网线断开或死机,就不会立刻通知到本机,必须使用2中的心跳办法。
至于心跳,给你个例子:
模拟通信中的客户端。客户端在运行过程中……
[/Quote]
感谢您的回复。但是似乎我的问题更严重一些。
我用的是remoting
我发一下我的代码
服务端:
public void Start(int port)
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = port;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false);
this.manager = new Manager();
ObjRef objRef = RemotingServices.Marshal(this.manager, "BroadCastMessage.soap");
}
服务端为监听。客户端是不监听的。
this.manager是远程对象
这个对象是在服务端实例化的。客户端拿到的是他的一个代理
客户端代码:
private void init()
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 0;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false);
this.manager = (IManager)Activator.GetObject(
typeof(IManager), "http://192.168.0.1:9999/BroadCastMessage.soap");
this.wrapper = new EventWrapper();
this.wrapper.Ip = this.GetLocalhostIp();
this.wrapper.RequestSendMessageEvent += new RequestSendMessageEventArgsHandler(this.CreateFile);
this.wrapper.SendMessageEvent += new SendMessageEventArgsHandler(this.WriteFile);
this.wrapper.SendMessageFinishEvent += new SendMessageFinishEventArgsHandler(this.WriteEnd);
this.wrapper.CancelSendMessageEvent += new CancelSendMessageEventArgsHandler(this.CancelWrite);
}
客户端初始化部分。
然后执行
pubilc void connect()
{
this.manager.AddClient(this.wrapper);
}
这个是把客户端订阅三个事件的wrapper对象增加到服务端里
只有执行manager这个远程对象的代理的方法,才能检测出来是否失去了于服务器的链接。
当然我可以在manager里随便定义一个方法。隔一段事件执行一下。看是否成功。成功就是服务器在线,反之失败就是服务端不存在
可是我试写了一下。没有办法保证能够实时检查服务器是否可用。
五位数
2010-10-22
打赏
举报
回复
无人关注吗?
在
remoting
里使用
客户端
调用
本文介绍了一种解决
服务端
调用已异常退出
客户端
的方法的问题方案。通过
客户端
订阅
服务端
事件并传递方法委托,
服务端
可调用
客户端
方法。文章详细展示了如何在
服务端
检查无效的
客户端
连接
并进行清理。
Microsoft .Net
Remoting
系列专题之三:
Remoting
事件处理全接触
本文围绕
Remoting
技术中的事件处理展开,介绍了
服务端
订阅
客户端
事件、
客户端
订阅
服务端
事件、
客户端
订阅
客户端
事件三种形式的实现方法,还提及自定义EventArgs的处理,最后对程序进行持续改进,使程序更完善、健壮和友好。
.Net
Remoting
服务端
与
客户端
调用示例
本文介绍如何使用.Net
Remoting
技术通过接口分离程序集的方式实现
服务端
与
客户端
的远程方法调用。
服务端
通过定义公共接口并实现具体的服务逻辑,
客户端
则通过该接口调用
服务端
提供的方法。
使用.NET
Remoting
技术并采用
服务端
SingleCall激活方式下如何实现
客户端
向
服务端
传递参数...
本文探讨了在.NET
Remoting
环境下,如何在
客户端
向
服务端
传递参数的问题,特别是在使用SingleCall激活方式下,
服务端
对象无法直接接收带参数的构造函数。通过修改架构和接口设计,最终实现了参数的有效传递。
Remoting
事件
本文深入探讨了.NET
Remoting
中事件处理的技术细节,包括
服务端
订阅
客户端
事件、
客户端
订阅
服务端
事件及
客户端
订阅
客户端
事件等场景,并提供了改进方案。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章