第一步:创建ActiveX控件类库,在解决方案中右击添加Window窗体控件库

在该类库属性中,设置 使程序集COM可见,同时设置为COM互操作注册

另外在自动生成的文件中AssemblyInfo.cs,添加[assembly: AllowPartiallyTrustedCallers()]

以上操作的目的是,让其他框架页可以访问该ActiveX里的方法

第二步:添加前台接口类,主要给web页面调用

    [Guid("806635E5-AFF1-4BBE-960F-121910EB7F7A"),InterfaceType(ComInterfaceType.InterfaceIsDual),ComVisible(true)]
public interface ISendMsg
{
[DispId(1)]
int Conn(string ip,int port);
[DispId(2)]
void Send(string msg);
}

添加了这个方法,网页页面就可以访问这两个方法了

第三步:添加ActiveX触发接口,用于触发传递到Web页面的事件

    [Guid("D6F88421-BE17-4310-9692-A07A00CDF474"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch),ComVisible(true)]
public interface IMsgEvent
{
[DispId(21)]
void OnMsgHander(string msg);
}

第四步:在ActiveX类库中,实现前台接口类的实现方法

[Guid("8366F83A-F207-4B41-ACD1-49A3EBAFE192"), ProgId("Socket_Ocx.UserMain"), ClassInterface(ClassInterfaceType.None), ComDefaultInterface(typeof(ISendMsg)),ComSourceInterfaces(typeof(IMsgEvent)), ComVisible(true)]
public partial class UserMain : UserControl, ISendMsg
{
private Socket client;
public delegate void MsgHander(string msg);
public event MsgHander OnMsgHander; public UserMain()
{
InitializeComponent();
} /// <summary>
/// 连接到WEB通信服务器,同时开启接收消息线程
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
public int Conn(string ip, int port)
{
int result = 0;
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(ip),port);
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
client.Connect(iep);
result = 1;
Thread nowThread = new Thread(new ThreadStart(ReciveData));
nowThread.Start();
}
catch
{
result = 0;
}
return result;
} //发送消息给WEB服务器
public void Send(string msg)
{
try
{
byte[] data = Encoding.UTF8.GetBytes(msg);
client.Send(data);
}
catch (Exception ex)
{ }
} /// <summary>
/// 接收WEB服务器发来的消息
/// </summary>
private void ReciveData()
{
int res;
while (true)
{
try
{
byte[] bytes = new byte[1024];
res = client.Receive(bytes);
string msg = Encoding.UTF8.GetString(bytes, 0, res);
OnMsgHander(msg);
}
catch (Exception ex)
{ }
}
}
}

第五步:Web页面连接及接收发送数据

<object id="ocx" classid="clsid:8366F83A-F207-4B41-ACD1-49A3EBAFE192">
</object>

前台脚本编写,代码如下:

	<script for="ocx" language="JavaScript" event="OnMsgHander(s)">
if(document.getElementById("txtAllMsg").value == ""){
document.getElementById("txtAllMsg").value = s;
}
else{
document.getElementById("txtAllMsg").value += "\r\n"+ s;
}
</script>
<script type="text/javascript">
function onLogin(){
var user = document.getElementById("txtUserName").value;
var pswd = document.getElementById("txtPswd").value;
if(user==""||pswd==""){
alert("请输入用户名及密码!");
return;
}
document.getElementById("divMax").style.display="none";
document.getElementById("txtUser").value = user;
document.getElementById("spanUser").innerHTML = user;
init();
} function init(){
var res = ocx.Conn('127.0.0.1',2000);
} function onSend(){
var msg = document.getElementById("txtSendMsg").value;
if(msg==""){
alert("您的发送内容为空!");
return;
}
var user = document.getElementById("txtUser").value;
ocx.Send(user+":"+msg);
if(document.getElementById("txtAllMsg").value == ""){
document.getElementById("txtAllMsg").value = user+":"+msg;
}
else{
document.getElementById("txtAllMsg").value += "\r\n"+ user+":"+msg;
}
document.getElementById("txtSendMsg").value ="";
}
</script>

以上展示的是客户端基本结构及主要代码,下一篇主要接收服务器端主要结构及代码

源代码:WebChart.rar

WebChart网页局域网聊天系列(一):ActiveX插件编写的更多相关文章

  1. WebChart网页局域网聊天系列(二):服务器结构及核心代码

    public partial class MainForm : Form { private Socket server;//服务器Socket private int userNum;//当前在线用 ...

  2. 网页中控制ActiveX插件高度

    说明:IE窗口中承载了一个ActiveX插件,试图使该插件充填窗口(自适应窗口的高度.宽度),且不出滚动条. 承载插件的代码如下: <body>    <form id=" ...

  3. 网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  4. [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP

    网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...

  5. javascript检测ActiveX插件是否安装/启用

    本文主要提供在IE浏览器下检测ActiveX插件安装/启用的状态. 在一些应用开发中,需要用到一些第三方提供的ActiveX插件,如Flash插件. 为了在未安装插件的浏览器显示友好的提示,需要用到主 ...

  6. 【Python】iichats —— 命令行下的局域网聊天程序

    转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html   ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...

  7. IE添加可信任站点,启用ActiveX插件批处理

    添加可信任站点IP地址为:192.168.1.108,启用ActiveX插件执行以下批处理命令: reg add "HKCU\Software\Microsoft\Windows\Curre ...

  8. 使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM

    使用PHP+Swoole实现的网页即时聊天工具 全异步非阻塞Server,可以同时支持数百万TCP连接在线 同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE 拥有完整 ...

  9. ActiveX插件的Z-Index属性无效问题解决

    在Web开发中我们经常通过z-index设置多个元素之间的层叠关系,这种方式在多数情况下很有效,但是如果遇到有窗体元素时这种方式常常显得无能为力,今天我们就一块看一下如何有效的解决这个问题. 在Web ...

随机推荐

  1. 07_XPath_01_入门

    [工程截图] [person.xml] <?xml version="1.0" encoding="UTF-8"?> <students> ...

  2. sql执行超时处理

    首先设置数据库的配置文件  看看效果 如果程序还是超时则在连接字符串中做出处理 不然程序会自动kind的连接进程   程序和数据库方面都要配置缺一不可

  3. syntax error near unexpected token `then'

    #!/bin/bashclearfunction test{   if[$1 -eq "root"]&&[$2 -eq "123456"]    ...

  4. Linux DNS 设置失败

    在执行 yum install gcc 时 发现下载失败 ping www.baidu.com ping 不通 ping 百度的IP:220.181.111.188却能ping 通 由此证明是DNS的 ...

  5. QML鼠标区域控制

    鼠标操作使用很多,下面给出一个示例: import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Window 2.2 import Q ...

  6. GDI+ 如何将图片绘制成圆形的图片

    大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { ...

  7. memcached全面剖析--2

    理解memcached的内存存储 下面是<memcached全面剖析>的第二部分. 发表日:2008/7/9 作者:前坂徹(Toru Maesaka) 原文链接:http://gihyo. ...

  8. JSONP(跨域请求) —— 一种非官方跨域数据交互协议

    1.JSONP的作用 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为 了实现跨域请求,可以通过script标签实现跨域请求,然后再服务器端输出JSON数 ...

  9. sublime主题推荐

    PS:之前在CSDN上写的文章,现在转到博客园~ 寒假的时候发现一个sublime主题,我觉得很赞哦~~推荐给大家~~ 下载方式 step1:ctrl+shift+p  调出command palet ...

  10. hdu 5652 India and China Origins 并查集+逆序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意:一张n*m个格子的点,0表示可走,1表示堵塞.每个节点都是四方向走.开始输入初始状态方格, ...