社区
C#
帖子详情
如何判断remoting的客户端已经连接上服务端
五位数
2010-10-21 04:21:18
是这样。我的远程对象是在服务端上实例化的。
然后客户端获得这个远程对象的代理。
现在客户端需要在服务端上注册自己。
可是如果服务端并没有起来。客户端是不能在服务器上注册自己的。也就是连接不到服务器
所以我需要知道客户端是否实时的能够连接到服务器。
希望懂的朋友给点提示
...全文
615
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
技术通过接口分离程序集的方式实现
服务端
与
客户端
的远程方法调用。
服务端
通过定义公共接口并实现具体的服务逻辑,
客户端
则通过该接口调用
服务端
提供的方法。
Remoting
事件
本文深入探讨了.NET
Remoting
中事件处理的技术细节,包括
服务端
订阅
客户端
事件、
客户端
订阅
服务端
事件及
客户端
订阅
客户端
事件等场景,并提供了改进方案。
使用.NET
Remoting
技术并采用
服务端
SingleCall激活方式下如何实现
客户端
向
服务端
传递参数...
本文探讨了在.NET
Remoting
环境下,如何在
客户端
向
服务端
传递参数的问题,特别是在使用SingleCall激活方式下,
服务端
对象无法直接接收带参数的构造函数。通过修改架构和接口设计,最终实现了参数的有效传递。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章