• javascirpt Scoket


    最近在做项目时,遇到一个比较诡异的需求。要求在客户端页面与客户端软件进行通信。网上发现了一个好东西,通过javascipt+flash能实现Socket的功能,具体看如下链接:http://www.maiyun.net/components/socket/index.html,有这么好的已经封装好的Socket类干嘛不用^^

    以下为 Asp.net ,c#开发的通讯DEMO。

    前台代码:

    代码
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <script type="text/javascript" src="flash.min.js"></script>
    <script type="text/javascript" src="socket.min.js"></script>
    <script type="text/javascript">
    function CalltoServer() {
    var Socket = new Maiyun_Socket();
    Socket.Init();
    //初始化组件
    Socket.OnLoad(function() {//组件初始化成功后触发
    Socket.Open("127.0.0.1", 9010);//连接服务器
    Socket.OnConnect(function() {//连接成功后触发
    alert("连接成功");
    Socket.Send(
    "来自前台WeB");//发送消息
    });

    Socket.OnData(
    function(msg) {//接收消息
    alert(msg);
    });
    });
    }
    </script>
    </head>
    <body>

    <input type="button" value="ClientMe" onclick="CalltoServer()" />
    </body>
    </html>

    后台代码:

    代码
    static void Main(string[] args)
    {
    string host = "127.0.0.1";
    int port = 9010;

    IPAddress ip
    = IPAddress.Parse(host);
    IPEndPoint ipe
    = new IPEndPoint(ip, port);

    Socket sc
    = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    sc.Bind(ipe);
    sc.Listen(
    5);

    while (true)
    {
    Socket clientSocket
    = sc.Accept();
    Console.WriteLine(
    "建立连接:"+clientSocket.RemoteEndPoint.ToString());

    //接收数据
    byte[] buff = new byte[1024];//缓冲区
    int count = clientSocket.Receive(buff, buff.Length, 0);//接收的字节
    string recstr = Encoding.UTF8.GetString(buff, 0, count);//byte[]转换成string
    Console.WriteLine("接受到客户端数据:" + recstr);

    //flash socket 安全验证
    if (recstr.IndexOf("<policy-file-request/>") >= 0)
    {
    //此处为C#语言的回复
    byte[] data = System.Text.Encoding.UTF8.GetBytes("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"9010\" /></cross-domain-policy>\0");
    clientSocket.Send(data);
    clientSocket.Close();
    continue;
    }

    //发送数据
    string context = "我是服务器!";
    byte[] sendStr = Encoding.UTF8.GetBytes(context);
    clientSocket.Send(sendStr);
    clientSocket.Close();
    Console.WriteLine(
    "向客户端发送:"+context);
    }
    }

    flash 安全验证请查看如下文章:http://cloud21.javaeye.com/blog/617751

    结果如下:

  • 相关阅读:
    linux命令: mount
    梳理一下uboot是如何从nandflash挂载文件系统的
    MDK的优化应用
    面向对象设计思想:面向对象设计的基本原则
    问题
    nodejs安装不了和npm安装不了的解决方法
    []: secureCRT连接ubuntu问题- The remote system refused the connection
    字符设备驱动[深入]:linux cdev详解
    使用MDK将STM32的标准库编译成lib使用
    liteos任务(二)
  • 原文地址:https://www.cnblogs.com/xinjian/p/1796858.html
Copyright © 2020-2023  润新知