基于C#net4.5websocket客户端与服务端

只支持win8以上系统以及windows server2012以上系统

最近在研究视频传输给浏览器,然后使用H5标签解码。视频流采用websocket传输。所以研究了一下C#的websocket。

首先使用HttpListener进行侦听,HttpListener监听需要启动管理员权限才能运行,或者注册该端口,注册如下:

已管理员身份运行cmd.exe 输入下面两个命令
netsh http delete urlacl url=http://127.0.0.1:8080/

netsh http add urlacl url=http://*:9999/ user=Everyone listen=yes

查看已经加载的url  :netsh http show urlacl

 

*******************websocket服务端****************************************

第一步:创建HttpListener类,并启动监听:

            var listener = new HttpListener();
            listener.Prefixes.Add("http://10.10.13.140:8080/");
            listener.Start();

第二步:等待连接

var context = listener.GetContext();

第三步:接收websocket

                var wsContext = await context.AcceptWebSocketAsync(null);
                var ws = wsContext.WebSocket;
                Console.WriteLine("WebSocket connect");

第四步:开始异步接收数据

                    //接收数据
                    var wsdata = await ws.ReceiveAsync(abuf, cancel);
                    Console.WriteLine(wsdata.Count);
                    byte[] bRec = new byte[wsdata.Count];
                    Array.Copy(buf, bRec, wsdata.Count);
                    Console.WriteLine(Encoding.Default.GetString(bRec));

第五步:释放资源

                //注意,使用完,记得释放,不然会有内存泄漏
                ws.Dispose();

*******************websocket客户端****************************************

这里使用ClientWebSocket类进行

第一步:创建ClientWebSocket

ClientWebSocket webSocket = new ClientWebSocket();

第二步:建立websocket连接

                await webSocket.ConnectAsync(new Uri("ws://10.10.13.140:8080/"), cancellation);
                Console.WriteLine(111);

第三步:发送数据

                //发送数据
                await webSocket.SendAsync(new ArraySegment<byte>(bsend), WebSocketMessageType.Binary, true, cancellation);

                await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "1", cancellation);

第四步:释放资源

                //释放资源
                webSocket.Dispose();

 

 

 

为了方便大家学习,整理了一下服务端和客户端的代码,采用C# net4.5 vs2017开发环境

连接如下:

点击打开链接

*************--------------备注---------------******************************************

 

发现win7下无法运行,参考

https://msdn.microsoft.com/en-us/library/system.net.websockets.clientwebsocket(v=vs.110).aspx

关键部分如下:

Some of the classes and class elements in the System.Net.WebSockets namespace are supported on Windows 7, Windows Vista SP2, and Windows Server 2008. However, the only public implementations of client and server WebSockets are supported on Windows 8 and Windows Server 2012. The class elements in the System.Net.WebSockets namespace that are supported on Windows 7, Windows Vista SP2, and Windows Server 2008 are abstract class elements. This allows an application developer to inherit and extend these abstract class classes and class elements with an actual implementation of client WebSockets.

 

 

 

 

### 回答1: WebSocket 是一种基于 TCP 协议的网络协议,它支持双向通信,可以在客户端服务端之间实时地传输数据。在 WebSocket 中,客户端服务端之间的通信是基于消息的,这意味着它可以传输各种类型的数据,包括文本、二进制数据等。 要在 WebSocket 客户端服务端之间进行图片交互,可以采用以下步骤: 1. 在服务端上启动 WebSocket 服务器,并监听客户端连接的请求。 2. 在客户端创建 WebSocket 对象,并连接到服务端WebSocket 服务器。 3. 在客户端上选择要传输的图片,并将其转换为 Base64 编码格式。 4. 将 Base64 编码格式的图片数据封装成 WebSocket 消息,并发送给服务端。 5. 在服务端上接收到客户端发送的 WebSocket 消息后,解析消息中的图片数据,并将其保存到文件系统中。 6. 在服务端上将保存在文件系统中的图片数据转换为 Base64 编码格式,并封装成 WebSocket 消息,发送给客户端。 7. 在客户端上接收到服务端发送的 WebSocket 消息后,解析消息中的图片数据,并将其显示在客户端上。 需要注意的是,在传输大量的图片数据时,WebSocket 可能会产生较大的带宽消耗,因此建议在传输之前对图片进行压缩处理,以减小数据量。同时,为了保证传输的安全性,可以使用 SSL/TLS 协议来保护 WebSocket 连接。 ### 回答2: WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端服务端之间的实时数据传输。在图片交互方面,WebSocket客户端服务端可以通过以下步骤进行图片交互: 1. WebSocket客户端服务端建立连接:WebSocket客户端通过HTTP请求与服务端建立WebSocket连接。服务端会返回一个握手响应,在响应头中包含必要的信息验证该连接。 2. 客户端发送请求:客户端在建立好连接后,可以通过WebSocket发送请求给服务端。在图片交互中,可以使用消息的方式向服务端传递图片相关的请求,如请求某个图片资源。 3. 服务端处理请求:服务端接收到客户端的请求后,对其进行解析和处理。根据请求中的参数,服务端可以读取指定的图片资源。 4. 服务端响应请求:服务端会将图片资源以二进制数据的形式返回给客户端。可以将图片数据作为WebSocket消息的一部分,或者通过WebSocket连接发送图片路径等信息,使客户端能够通过该路径获取图片资源。 5. 客户端处理响应:客户端接收到服务端返回的数据后,解析数据并进行处理。可以将二进制数据转换为图片展示在界面上,或者通过提取图片路径等信息,通过网络请求获取图片资源后展示。 6. 数据传输完毕,关闭连接:当图片交互完成后,可以选择手动关闭WebSocket连接,释放资源。 WebSocket客户端服务端的图片交互通过实时双向通信,可以实现快速传输和实时展示图片,提供了更好的用户体验和交互性。 ### 回答3: WebSocket客户端服务端可以通过传输图片来实现交互。在WebSocket的通信过程中,客户端可以发送图片数据给服务端服务端也可以将图片数据发送给客户端。 首先,客户端可以通过JavaScript的WebSocket API连接到服务端。然后,客户端可以选择一个图片文件并将其转换为二进制数据。接着,客户端可以将二进制数据发送给服务端,使用WebSocket的send()方法将数据传输给服务端服务端在接收到图片数据后,可以将其保存到服务器的文件系统中,或者进行其他处理。服务端可以使用任何服务器端的编程语言来处理WebSocket消息,并根据需要进行解码和处理接收到的图片数据。 对于服务端发送图片给客户端的交互,服务端可以将图片数据转换为二进制数据,并使用WebSocket的send()方法将其发送给客户端客户端收到图片数据后,可以将其转换为图片格式,并在页面上显示出来。 需要注意的是,在传输大量图片数据时,可能需要对数据进行压缩和数据包分割,以避免网络传输过程中的性能问题和数据丢失或损坏。 综上所述,WebSocket客户端服务端可以通过传输图片数据来实现交互。客户端可以将图片数据发送给服务端,而服务端也可以将图片数据发送给客户端。这种交互可以通过WebSocket的API和相关的编程语言和技术来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值