• js 和 winform 中使用WebSocket


    由于最近学习Socket相关知识,所以也研究了WebSocket

    由于前面篇幅都有介绍socket相关知识,网上也有很多资料

    此处就推荐一个js中的websocket教程:http://www.ruanyifeng.com/blog/2017/05/websocket.html

    这篇主要是代码共享和学习交流:由于学习时,不记得是从哪个网上下载的源码,抱歉!

    cs源码主要使用HttpListener和WebSocket实现服务器和客户端

    js中主要实现WebSocket客户端 

    最底下,有源码可供下面

    1、cs功能简单介绍

    服务器界面:开启、关闭监听,广播数据给客户端

    客户端界面:开启、关闭连接,发送数据给服务端

    服务器端:可以广播多个客户端

    客户端:发送数据给服务端,服务端接收数据后又自动广播给其它客户端

    2、js功能简单介绍

    服务端开启监听,网页客户端中连接服务端,服务端广播数据,网页客户端接收并显示数据

    网页客户端:输入数据点击提交,服务器收到客户端的消息

     

    js代码如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>简单使用js中的websocket</title>
    </head>
    <body>
        <div>
            <form id="Form">
                <label id="address">服务端地址:</label>
                <input name="" id="IpAddress" value="ws://127.0.0.1:8011" />
                <button type="submit" onclick="Connect();">连接</button><br />
    
                <label id="name">name</label>
                <input name="" id="ValueName" value="" /> 
                <label id="course">course</label>
                <input name="" id="ValueCourse" value="" />
                <button type="submit" onclick="SendData();">提交</button><br />
    
            </form>
            <div id="txtInfo" style="border: dashed 1px black; height: 500px;  500px; margin-top: 10px;">
            </div>
        </div>
    
        <script type="text/javascript">
                //连接服务器
                function Connect() {
    
                var print = document.getElementById('txtInfo');
                var form = document.getElementById('Form');
                //var inputStrA = document.getElementById('ValueA');
                var ipaddress = document.getElementById('IpAddress').value;
    
                print.innerHTML += "connecting to server ..<br/>";
    
                //参数即想要连接服务器的ip。 服务器可以是node.js, 也可以是其他项目,如c#
                //window.ws = new WebSocket('ws://10.206.14.152:8080/'); //连接服务
                //window.ws = new WebSocket('ws://192.168.43.78:8080/'); //连接服务
                window.ws = new WebSocket(ipaddress); //连接服务
    
    
                //监听消息状态
                ws.onmessage = function (msg) {
                    var jsobj = JSON.parse(msg.data);//json字符串转为对象
                    console.log('msg='+msg);
                    document.getElementById('ValueName').value = jsobj.Name;    //写入输入框中
                    document.getElementById('ValueCourse').value = jsobj.Course;
    
                    print.innerHTML += msg.data + '<br/>'
                }
                //监听链接状态
                ws.onopen = function () {
                    print.innerHTML += 'connection open <br/>'
                }
                //监听关闭状态
                ws.onclose = function () {
                    print.innerHTML += 'connection closed<br/>';
                }
                //监听连接失败
                ws.onerror = function(){
                    print.innerHTML += 'connection error<br/>'; 
                };
    
                //向服务器端发送消息
                form.addEventListener('submit', function (e) {
                    e.preventDefault();
                    //序列化后的字符串发给服务端,服务端以字节数组格式接收,若转成字符串并添加部分信息再转回字节数组时,string.format函数会报错
                    //var jsonObj = { "name": "zhangsan", "age": 18 };
                    //传入一个json字符串进行测试,服务器会进行判断。
                    //ws.send(JSON.stringify(jsonObj));
                    //ws.send(jsonObj);
                    //传入一个非json字符串进行测试,服务器会进行判断。
                    //ws.send("test");
                })
            } 
      
            //发送数据
            function SendData() {
                var valueName = document.getElementById('ValueName').value;
                var valueCourse = document.getElementById('ValueCourse').value;
    
                if (valueName.length == 0) { valueName = "-"; }
                if (valueCourse.length == 0) { valueCourse = "-"; }
    
                var jsonobj = {
                    "Name": valueName,
                    "Course": valueCourse
                };
                var jsonstr = JSON.stringify(jsonobj);
    
                //初始化WebSocket
                //InitWebSocket();
                //如果WebSocket打开,发送数据
                if (ws.OPEN && ws.readyState == 1) {
                    //send(); 发送数据   WebSocket通过send()方法向服务器端发送请求,onmessage 接收数据
                    ws.send(jsonstr);
                }
                console.log(ws.readyState);
                //如果WebSocket关闭,显示消息
                if (ws.readyState == 2 || ws.readyState == 3) {
                    console.log("进来关闭函数了")
                    alert("WebSocket关闭了,无法发送数据");
                }
            }
        </script>
    
    </body>
    </html>
    View Code

    由于cs源码内容偏多,就不在此列出,需要的可以下载源码做参考

    源码下载

  • 相关阅读:
    mac 电脑自动登录服务器
    prometheus-operator 监控 k8s 外部集群
    生产prometheus-operator 监控二进制kubernetes
    微信小程序-nginx-https 代理后端服务
    Redis 高可用之哨兵模式
    Redis 高可用之数据持久化
    服务之间连接不上问题分析
    prometheus 告警指标
    错误代码:0x800706BE 解决方法
    泛微OA服务器更改IP地址后EMobile出现“调用远端服务器接口时发生错误(122)”的提示
  • 原文地址:https://www.cnblogs.com/ggll611928/p/15749759.html
Copyright © 2020-2023  润新知