`
holoblog
  • 浏览: 1264224 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19540
文章分类
社区版块
存档分类
最新评论

WebSocket握手服务端响应算法『java』

 
阅读更多
/ **
*GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:50000
Sec-WebSocket-Origin: http://localhost
Sec-WebSocket-Key: BYEBkScKdCuqSKY2Mf6CIg==
Sec-WebSocket-Version: 8
Cookie:
*/
publicHashMap<String,String>getRequestHeader(byte[]data){
StringrequestHeader=newString(data);
requestHeader=requestHeader.substring(0,requestHeader.indexOf("\r\n\r\n"));
String[]reqarr=requestHeader.split("\r\n");
reqHeader=newHashMap<String,String>();
for(inti=0;i<reqarr.length;i++){
StringrequestHeaderLine=reqarr[i];
if(requestHeaderLine.toUpperCase().startsWith("GET")||requestHeaderLine.toUpperCase().startsWith("POST")){
String[]first=requestHeaderLine.split(" ");
if(first.length==3){
Stringmethod=first[0];
Stringlocation=first[1].replaceAll("\\s","");
Stringprotocol=first[2].split("/")[0];
StringprotocolVersion=first[2].split("/")[1];
reqHeader.put("Method",method);
reqHeader.put("Location",location);
reqHeader.put("Protocol",protocol);
reqHeader.put("ProtocolVersion",protocolVersion);
}
}else{
String[]reqlinearr=requestHeaderLine.split(":");
if(reqlinearr.length==2){
Stringkey=reqlinearr[0];
Stringvalue=reqlinearr[1].replaceAll("\\s","");
reqHeader.put(key,value.replaceAll("\\s",""));
}
}
}
returnreqHeader;
}
publicStringgetResponseHeader(){
StringoriginKey=reqHeader.get("Sec-WebSocket-Key")+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
java.security.MessageDigestalga=null;
byte[]digesta=null;
try{
alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(originKey.getBytes());
 digesta=alga.digest();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
byte[]respKey=org.apache.commons.codec.binary.Base64.encodeBase64(digesta);
Stringheader="HTTP/1.1 101 Switching Protocols\r\n"+
"Upgrade: Websocket\r\n"+
"Connection: Upgrade\r\n"+
"Sec-WebSocket-Accept: "+newString(respKey)+"\r\n\r\n";
returnheader;
}
分享到:
评论

相关推荐

    c#、.NET6实现websocket协议服务端demo,完整清晰的解析和打包示例

    4. **请求头解析**:WebSocket握手请求是HTTP请求,因此你需要解析请求头以确认WebSocket连接。这可以通过`HttpRequestHeaders`属性完成: ```csharp var headers = context.Request.Headers; if (!headers....

    linux c语言实现websocket

    `iot_sha1.c`和`iot_sha1.h`则涉及SHA-1散列算法,WebSocket协议在握手过程中使用了此算法来验证消息的完整性。SHA-1被用于生成一个消息验证码(Message Authentication Code, MAC),确保数据在传输过程中未被篡改...

    图像识别(OCR)WebSocket协议WebAPI开发文档1

    - 鉴权成功,WebSocket握手回复的状态码为101。 - 鉴权失败,状态码为403,响应报文包含错误信息,可据此了解失败原因。 6. **数据交换**: - 握手成功后,通过WebSocket连接发送和接收数据。请求方发送JSON格式...

    易语言websocket服务器

    7. **取SHA1**:在生成Sec-WebSocket-Accept头时,服务器通常会用到SHA1哈希算法,结合客户端提供的Sec-WebSocket-Key和特定的GUID字符串计算出响应值。 8. **切片**:在处理二进制数据时,可能需要对字节序列进行...

    机器翻译(MT)WebSocket协议WebAPI开发文档1

    - 在WebSocket握手阶段,请求方需将签名参数添加到URL后面,并进行URL编码。 - 服务端验证签名,若合法则返回状态码101,否则返回状态码403并附带错误信息。 5. 数据交互格式: - 所有数据均以JSON格式传输。 -...

    基于Web及数据库算法的软件应用框架设计分析 (1).pdf

    Websocket只需一次握手即可建立连接,实现数据的直接交换,响应速度极快。 在Web软件应用框架的设计中,除了传统的客户端、数据层和Web层之外,引入了Web缓存层。这个缓存层存储在内存中,提高了读写效率,避免在...

    libwebsockets-2.4

    它实现了握手、帧处理以及数据传输等功能,使得开发者可以轻松地在 C 语言环境中创建 WebSocket 服务端和客户端应用。 2. **C 语言实现** 由于是用 C 语言编写的,libwebsockets 具有高度的可移植性。C 语言的通用...

    libwebsockets-4.0.0.tar.gz

    WebSocket协议是一种在互联网上实现双向通信的规范,它允许Web应用和服务端进行全双工通信,极大地提高了实时性。这个库的目标是为开发者提供一个简单、高效且易于集成的解决方案。 **1. WebSocket协议** ...

    快手2019秋招笔试试题-工程B试卷.docx

    握手过程由客户端发起,而不是服务端,且握手部分的HTTP请求中的头字段没有顺序要求。 ### 计算机系统的状态表示 - **知识点**:程序状态字(PSW)通常用来记录处理器的状态。 - **解释**:在计算机系统中,表示...

    牛客前端面试高频八股总结(2)

    3. **WebSocket**:一种双向通信协议,可以实现客户端和服务端的持续连接,并进行全双工通信。 4. **Server-Sent Events (SSE)**:服务器向客户端推送数据,但客户端不能向服务器发送数据。 #### WebSocket 示例...

    基于c语言的tcp协议

    本篇将深入探讨基于C语言的TCP协议实现,以及如何构建一个简单的TCP客户端和服务端。 首先,TCP协议的基础是建立在三次握手的基础上,确保了两端之间的可靠连接。在C语言中,我们通常使用`socket`库来处理网络通信...

Global site tag (gtag.js) - Google Analytics