来访人员登记系统(二)网页客户端的实现和websocket通信

HTML

html主要写了一个表单提交的页面,用表格包含起来方便调整样式,时间部分用正则表达式限定输入内容必须为hh:mm的格式。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta charset="utf-8" />
    <title>XXXX股份有限公司主机房人员出入申请单</title>
    <link rel="stylesheet" href="style.css" />
    <script type="text/javascript" src="script.js"></script>
</head>

<body>
    <br />
    <h1>XXXX股份有限公司</h1>
    <h1>主机房人员出入申请单</h1>

    <div>
        <form id="sendForm">
            <table>
                <tr>
                    <td colspan="4"><input id="staff" class="text" type="text" placeholder="陪同人员" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><input id="name" class="text" type="text" placeholder="外单位人员" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><input id="company" class="text" type="text" placeholder="单位名称" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><input id="idcard" class="text" type="text" placeholder="身份证号" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><input id="phone" class="text" type="text" placeholder="电话" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><span>预约日期:</span><input id="date" class="date" type="date" required /></td>
                </tr>
                <tr>
                    <td colspan="4"><input id="ETA" class="text" type="text" placeholder="预期到达时间(hh:mm)" required pattern="^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]$"/></td>
                </tr>
                <tr>
                    <td colspan="4"><textarea id="intention" placeholder="进出事由" required></textarea></td>
                </tr>
                <tr>
                    <td colspan="4"><textarea id="relevants" placeholder="涉及设备/系统" required></textarea></td>
                </tr>
            </table>

            <br />
            <div>
                <input class="button" type="submit" value="提交" />&emsp;&emsp;&emsp;&emsp;
                <input class="button" type="reset" value="重置" />
            </div>
        </form>
    </div>
    <br /><br />
</body>

</html>

CSS

body {
    font-family: 'Microsoft YaHei';
    text-align: center;
}
table {
    margin: 0 auto;
    margin-top: 3%;
    text-align: center;
    font-size: 18px;
    width: 100%;
}
td {
    padding: 20px 0px 20px 0px;
}
input {
    font-size: 18px;
    font-family: 'Microsoft YaHei';
}
input.text {
    width: 300px;
    height: 40px;
}
input.date {
    width: 210px;
    height: 35px;
}
input.button {
    width: 80px;
    height: 40px;
}
textarea {
    font-size: 18px;
    font-family: 'Microsoft YaHei';
    width: 300px;
    height: 100px;
    resize: none;
}

JavaScript

创建websocket对象并覆写了提交按钮的方法,用户点击提交之后会通过send()方法把数据直接发送到指定ip地址的服务器上。

var start = function () {
    var wsImpl = window.WebSocket || window.MozWebSocket;
    window.ws = new wsImpl('ws://192.168.204.43:7181/');  // 服务器ip地址:端口号

    var form = document.getElementById('sendForm');
    var staff = document.getElementById('staff');
    var name = document.getElementById('name');
    var company = document.getElementById('company');
    var idcard = document.getElementById('idcard');
    var phone = document.getElementById('phone');
    var date = document.getElementById('date');
    var ETA = document.getElementById('ETA');
    var intention = document.getElementById('intention');
    var relevants = document.getElementById('relevants');

    ws.onmessage = function (evt) {
        // 收到消息后的操作
    };

    ws.onopen = function () {
        // 建立连接时的操作
    };

    ws.onclose = function () {
        // 关闭连接时的操作
    }

    form.addEventListener('submit', function (e) {
        e.preventDefault();  // 覆写submit的默认方法
        var msg = staff.value + ',' + name.value + ',' + company.value + ',' + idcard.value + ',' + phone.value + ',' + date.value + ',' + ETA.value + ',' + intention.value + ',' + relevants.value;
        ws.send(msg);
        alert("Your application has been submitted.");
        form.reset();
    });
};

window.onload = start;

服务端(C# winform)

服务端采用的是C# winform桌面应用程序,在其中的主类中添加一个自定义的StartServer()方法接收客户端信息,并在窗体加载时调用此方法开启监听。

Fleck包可以通过项目->管理NuGet程序包->搜索Fleck并下载得到,之后引用即可使用其中的方法。

在OnMessage方法中定义收到数据后的操作,此例中收到数据后将其传递给addfromClient方法,再由addfromClient方法添加到数据库中。

using Fleck;

private void StartServer()
{
    FleckLog.Level = LogLevel.Debug;
    var server = new WebSocketServer("ws://0.0.0.0:7181");  // 监听所有ip地址的7181端口

    server.Start(socket =>
    {
          socket.OnOpen = () => { };
          socket.OnClose = () => { };
          // 收到信息后自动添加到数据库
          socket.OnMessage = message =>
          {
                addfromClient(message);
          };
    });
}

总结

winform服务端在使用websocket时,需要把服务开启方法写在窗体类中,在初始化时调用服务开启方法实现对通信窗口的监听;
html中要使表单方便排列,可以通过表格嵌套表单的形式,但具体书写时应把form标签写在table标签外。


功能扩展

来访人员登记系统(十)网页端使用websocket向C#服务端传送图片和文字

posted @ 2020-09-14 15:07  老鼠司令  阅读(428)  评论(0)    收藏  举报