using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Security.Permissions;
[Serializable]
public class ChatRoom:MarshalByRefObject
{
public ChatRoom()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//定义了 3 个 "ChatRoomEventHandler 委托类型" 的事件及远程回调函数/.
public event ChatRoomEventHandler MessageReceive; //消息接收事件
public event ChatRoomEventHandler Login; //登录事件
public event ChatRoomEventHandler Logoff; //退出事件
public void OnMessageReceive(string Message)
{
if (MessageReceive != null)
{
//触发 Receiver 客户端 MessageReceive 事件,广播所有消息
MessageReceive(Message);
}
Console.WriteLine("Server: " + Message); //服务器消息监视
}
public void OnLogin(string User)
{
if (Login != null)
{
//触发 Receiver 客户端 Login 事件,广播 "登录" 消息
Login("System say: " + User + " Login!");
}
Console.WriteLine("Server: " + User + " Login!");
}
public void OnLogoff(string User)
{
if (Logoff != null)
{
//触发 Receiver 客户端 Logoff 事件,广播 "退出" 消息
Logoff("System say: " + User + " Logoff!");
}
Console.WriteLine("Server: " + User + " Logoff!");
}
public override object InitializeLifetimeService()
{
return null;
}
}
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Security.Permissions;
using System.Runtime.Remoting;
[Serializable]
class Receiver:MarshalByRefObject
{
//说明:一定要将这个EXE文件放一个在SERVER.EXE目录下,因为它也是SERVER的远程对象.
ChatRoom x;
public static void Main()
{
Receiver y = new Receiver();
y.Run();
}
public void Run()
{
RemotingConfiguration.Configure("c.config"); //相当于后期运行时绑定
x = new ChatRoom();
//向远程服务对象"注册"本地回调函数 this.Message_Receive1
x.MessageReceive += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
//Login Logoff 与 MessageReceive 签名一样
x.Login += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Logoff += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
Console.WriteLine("messages Receiver ... ,Press Enter key to exit.");
Console.ReadLine(); //退出关闭接收器
//千万不要忘记结束时取消委托关系
x.MessageReceive -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Login -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Logoff -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
}
//这个就是被服务器端远程回调的函数
public void Message_Receive1(string s)
{
Console.WriteLine(s);//在本地显示接收的广播消息
}
public override object InitializeLifetimeService()
{
return null;
}