c语言socket全双工通信,使用WebSocket进行全双工通信
一、WebSocket简介
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
二、WebSocket 通信原理
为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一 次“握手”(Handshaking)的步骤。
握手·请求
为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字 段,告知服务器通信协议发生改变,以达到握手的目的。
请求.jpg
Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。 Sec-WebSocket-Protocol 字段内记录使用的子协议。 子协议按 WebSocket 协议标准在连接分开使用时,定义那些连接 的名称。
177 握手·响应
对于之前的请求,返回状态码 101 Switching Protocols 的响应。
响应.jpg
Sec-WebSocket-Accept 的字段值是由握手请求中的 SecWebSocket-Key 的字段值生成的。 成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数 据帧,而采用 WebSocket 独立的数据帧。
成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数 据帧,而采用 WebSocket 独立的数据帧。
通信原理图.jpg
JavaScript 可调用“The WebSocket API”,以下为调用 WebSocket API,每 50ms 发送一次数据的实例。
var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
setInterval(function() {
if (socket.bufferedAmount == 0)
socket.send(getUpdateData());
}, 50);
};
c语言socket全双工通信,使用WebSocket进行全双工通信相关推荐
- c语言实现ftp网络应用程序,使用C语言socket实现windows pc与ftp服务器通信---socket实现ftp客户端...
code // Client.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include #include #include #pra ...
- 【小白入门】Socket和webSocket入门 这一篇就够了!用php的Socket自己实现简单webSocket服务器!
这几天研究了下php实现webSocket的方法,网上查了不少博文,涉及到的知识点不少.但却非常值得学,因为这方面典型的应用场景非常的多,消息推送,聊天室,所有需要长连接的地方都会用到它. ...
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...
- php winform通信,C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- Java语言Socket接口用法详解
Socket接口用法详解 在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...
- c语言socket面试题,【C++工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网...
● 请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别 参考回答: 1.互斥锁和读写锁区别: 互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象.当获取锁操作失败时,线程会 ...
- c语言socket通讯和进行进行大文件分片传输
c语言socket通讯和进行进行大文件分片传输 server端代码和client端代码 在windows上创建Cygwing工程11socket-server,创建完成后启动工程看不到效果,必须放到l ...
- SpringBoot(23) 集成socket.io服务端和客户端实现通信
一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...
- C语言 socket编程实例
C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...
最新文章
- ASM3.0学习(二)
- etcd集群搭建(高可用)
- 保留字(reserved field)是什么意思?
- 2017.9.28 约数研究 思考记录
- 2017.8.8 魔兽地图DotR 思考记录
- 完美解决doc、docx格式word转换为Html
- 开发用到的小功能、功能、网站等
- 运营小实践 -- 借助大数据平台刻画虎牙直播APP人群画像
- 关于JS按钮倒计时禁用的小Demo
- chromium目录下各个dll的作用
- 实现手机蓝牙解锁电脑_手机版和电脑版微信多开的实现方法
- 阿里云设置登录掩码错误无法登录
- 罗技推出可蓝牙连接的5.1环绕立体声扬声器
- 动态等待转圈效果(HTML、CSS、JS)
- MES与设备层的集成
- 鸿蒙系统平板界面,首发预装鸿蒙OS!华为MatePad Pro 2系统界面曝光
- Java中的.length与.length()
- linux操作系统理解-IPC
- python树结构输出到excel_【IT专家】使用Excel电子表格表示树层次结构,以便Python CSV reader轻松解析?...
- Mysql 列修改语句alter/changer/modify