C# websocket与html js实现文件发送与接收处理

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Fleck;
using System.Threading;
using System.IO;
using System.Net.WebSockets;
using System.Net.Sockets;
using System.Net;
namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            FleckLog.Level = LogLevel.Debug;
            var allSockets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://192.168.31.37:7181");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Open!");
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("Close!");
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
                };
                socket.OnBinary = file =>
                {
                    string path = ("D:/test.jpg");
                    //创建一个文件流
                    FileStream fs = new FileStream(path, FileMode.Create);
                    //将byte数组写入文件中
                    fs.Write(file, 0, file.Length);
                    //所有流类型都要关闭流,否则会出现内存泄露问题
                    fs.Close();
                };
            });

            //string ss = Console.ReadLine();
            var input = File.Open("D://test.jpg",FileMode.Open);
            while (true)
            {
                Thread.Sleep(2000);
                byte[] s = new byte[input.Length];
                input.Read(s, 0, s.Length);
                foreach (var socket in allSockets.ToList())
                {
                    socket.Send(s);
                }
                input.Close();
              input = File.Open("D://test.jpg", FileMode.Open);
            }
        }
    }
}
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat Client</title>
<meta charset="utf-8" />
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
<script type="text/javascript" >
    //判读浏览器是否支持websocket
    $().ready(function() {
        if ( !window.WebSocket ) {
             alert("童鞋, 你的浏览器不支持该功能啊");
        }
         
    });
    
    //在消息框中打印内容
function log(text) {
        $("#log").append(text+"\n");
    }
    
    //全局的websocket变量
var ws;
    
    //创建连接
    $(function() {
    $("#uriForm").submit(function() {
        log("准备连接到" + $("#uri").val());
        
        ws = new WebSocket($("#uri").val());
        //连接成功建立后响应
        ws.onopen = function() {
            log("成功连接到" + $("#uri").val());
        }
        //收到服务器消息后响应
        ws.onmessage = function(e) {
            //log("收到服务器消息:" + e.data + "‘\n");
             var reader = new FileReader();
             reader.onload=function(eve){
                        //判断文件是否读取完成
                         if(eve.target.readyState==FileReader.DONE)
                         {
//读取文件完成后,创建img标签来显示服务端传来的字节数//组
                            var img =document.createElement("img");
                //读取文件完成后内容放在this===当前
//fileReader对象的result属性中,将该内容赋值img标签//浏览器就可以自动解析内容格式并且渲染在浏览器中
                            img.src=this.result;
                        //将标签添加到id为show的div中否则,即便是有img也看不见
                            document.getElementById("show").appendChild(img);
                         }
                     };
                //调用FileReader的readAsDataURL的方法自动就会触发onload事件
                     reader.readAsDataURL(e.data);

        }
        //连接关闭后响应
        ws.onclose = function() {
            log("关闭连接");
            $("#disconnect").attr({"disabled":"disabled"});
            $("#uri").removeAttr("disabled");
            $("#connect").removeAttr("disabled");
            ws = null;
        }
        $("#uri").attr({"disabled":"disabled"});
        $("#connect").attr({"disabled":"disabled"});
        $("#disconnect").removeAttr("disabled");
        return false;
    });
    });
    
    //发送字符串消息
    $(function() {
    $("#sendForm").submit(function() {
         if (ws) {
             var textField = $("#textField");
             ws.send(textField.val());
             log("我说:" + textField.val());
             textField.val("");
             textField.focus();
         }
         return false;
    });
    });
    
    //发送arraybuffer(二进制文件)
    $(function() {
    $("#sendFileForm").submit(function() {
        var inputElement = document.getElementById("file");
        var fileList = inputElement.files;
        
        for ( var i = 0; i < fileList.length; i++) {
            console.log(fileList[i]);
            log(fileList[i].name);
            //发送文件名
            ws.send(fileList[i].name);
//            reader.readAsBinaryString(fileList[i]);
//读取文件  
       var reader = new FileReader();
            reader.readAsArrayBuffer(fileList[i]);
//            reader.readAsText(fileList[i]);
//文件读取完毕后该函数响应
            reader.onload = function loaded(evt) {
                var binaryString = evt.target.result;
                // Handle UTF-16 file dump
                log("\n开始发送文件");
                ws.send(binaryString);
            }
        }
        return false;
    });
    });
    
    $(function() {
    $("#disconnect").click(function() {
         if (ws) {
             $("#log").empty();
             ws.close();
             ws = null;
         }
         return false;
    });
    });
    
    $(function() {
    $("#reset").click(function() {
        $("#log").empty();
         return false;
    });
    });
    
    
</script>
</head>
<body>
    <form id="uriForm">
        <input type="text" id="uri" value="ws://192.168.31.37:7181"
            style="width: 200px;"> <input type="submit" id="connect"
            value="Connect"><input type="button" id="disconnect"
            value="Disconnect" disabled="disabled">
    </form>
    <br>
    
    <form id="sendFileForm">
        <input id="file" type="file" multiple />
        <input type="submit" value="Send" />
        <input type="button" id="reset" value="清空消息框"/>
    </form>
    <br>
    <form id="sendForm">
        <input type="text" id="textField" value="" style="width: 200px;">
        <input type="submit" value="Send">
    </form>
    <br>
    <form>
        <textarea id="log" rows="30" cols="100"
            style="font-family: monospace; color: red;"></textarea>
    </form>
    <br>
<div id=‘show‘></div>
</body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML5在线客服源码可以使用WebSocket实现实时通信WebSocketHTML5中的新特性,可以在浏览器和服务器之间创建持久的双向通信。 使用WebSocket可以实现在线客服功能,使客户端和服务器之间能够实时传输数据。客户端可以通过Web界面发送消息给客服人员,客服人员可以即时回复客户,实现实时的对话。 实现这个功能的源码可以分为客户端和服务器两部分。 客户端的源码可以使用HTML和JavaScript来实现。通过HTML创建一个聊天界面,包括发送消息的输入框和显示消息的文本框等元素。使用WebSocket API来建立与服务器的连接,并监听接收到的消息,将其显示在聊天界面上。通过JavaScript将发送的消息发送给服务器。 服务器的源码可以使用各种编程语言来实现,例如C、Java、Python等。通过WebSocket库创建一个WebSocket服务器,接受客户端的连接请求,并监听客户端发送的消息。当服务器接收到客户端发送的消息时,可以将其存储到数据库中,同时将消息广播给其他在线客服人员。当客服人员回复消息时,服务器将消息发送给对应的客户端。 通过以上的实现,我们可以实现一个基于WebSocketHTML5在线客服功能。客户可以在网页上发送消息给客服人员,客服人员收到消息后可以实时回复客户,实现实时的在线对话。这种实现方式可以提升客户和客服的沟通效率,提供更好的客户服务体验。 ### 回答2: HTML5在线客服源码可以使用 Websocket C 来实现Websocket C 是一个基于 C 语言的 WebSocket 客户端库,可以用于创建 WebSocket 连接,并与服务端进行实时的双向通信。 首先,你需要在你的项目中引入 Websocket C 库。可以通过下载源码并编译生成静态库,然后将其链接到你的项目中。 接下来,你可以使用 Websocket C 提供的 API 来创建 WebSocket 连接,并设置相关的回调函数来处理收到的消息和连接状态的变化。例如,你可以使用 `websocketc_create` 函数来创建 WebSocket 对象,并使用 `websocketc_open` 函数来打开与服务端的连接。 一旦连接建立成功,你可以使用 `websocketc_send` 函数发送消息给服务端,使用 `websocketc_receive` 函数接收服务端发送的消息。你可以在接收消息的回调函数中处理收到的消息,并根据需要进行相应的响应或处理。 同时,你也需要在合适的时机关闭连接,可以使用 `websocketc_close` 函数来关闭 WebSocket 连接,并释放相关资源。 总结而言,使用 Websocket C 可以方便地实现 HTML5 在线客服功能,通过 WebSocket 连接实现服务端和客户端之间的实时通信,提供更好的用户体验和互动功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值